It comes down to a simple choice: Keep busy living or get busy dying.
| @Author:TTODS
整数类型 | 宽度 | 取值范围 |
---|---|---|
byte | 1个字节(8位) | -128~127 |
short | 2个字节(16位) | -215~215-1 |
int | 4个字节 (32位) | -231~231-1 |
long | 8个字节(64位) | -263~263-1 |
public class TypeOfData{public static void main(String[] args) {System.out.println("默认的整数类型是int类型:"+16);byte byteNum = 16;short shortNum = 16;int intNum = 16;long longNum = 16L; //此处可为小写的l但是一般写大写的L,因为大写的L更容易与数字1区分System.out.println("byteNum="+byteNum);System.out.println("shortNum="+shortNum);System.out.println("intNum="+intNum);System.out.println("longNum="+longNum);}
}
输出:
默认的整数类型是int类型:16
byteNum=16
shortNum=16
intNum=16
longNum=16
浮点类型 | 宽度 |
---|---|
float | 4个字节(32位) |
double | 8字节(64位) |
public class TypeOfData{public static void main(String[] args) {System.out.println("java 默认的浮点类型的数据是double类型:"+0.0);float floatNum = 0.0f;double doubleNum = 0.0d;System.out.println("floatNum="+floatNum);System.out.println("doubleNum="+doubleNum);}
}
输出:
java 默认的浮点类型的数据是double类型:0.0
floatNum=0.0
doubleNum=0.0
除了上面的表示方法,常用来表示数字的方法还有进制表示法,和指数表示法
public class TypeOfData{public static void main(String[] args) {System.out.println("---数字的不同进制表示---");int decimalInt = 255;int binaryInt = 0b11111111;//0B11111111int octalInt = 0377;int hexdecimalInt = 0xFF; //0XFFSystem.out.println("decimalInt="+decimalInt);System.out.println("binaryInt="+binaryInt);System.out.println("octalInt="+octalInt);System.out.println("hexdeximalInt="+hexdecimalInt);System.out.println("---数字的指数表示法---");double num1 = 2.0e4;//2.0E4double num2 = 9.93e-2;//9.93E-2System.out.println("num1="+num1);System.out.println("num2="+num2);}
}
输出:
---数字的不同进制表示---
decimalInt=255
binaryInt=255
octalInt=255
hexdeximalInt=255
---数字的指数表示法---
num1=20000.0
num2=0.0993
字符类型 | 宽度 |
---|---|
char | 2个字节(16位) |
字符类型表示单个字符,java中用char声明字符类型,声明方法如下:
char ch = 'A';//注意只能使用英文的单引号
因为java采用双字节的Unicode编码,所以char类型占两个字节。
public class TypeOfData{public static void main(String[] args) {char ch ='T';char ch1 = 'u0054'; //Unicode编码char ch2 = '龙'; //Unicode编码可支持亚洲文字(中、日、韩文等)System.out.println("ch="+ch);System.out.println("ch1="+ch1);System.out.println("ch2="+ch2);}
}
字符类型也属于字符类型,可于其他的字符类型进行计算,用于计算的值就是Unicode编码的值,取值范围是0X0000~0XFFFF(0~216-1);
public class TypeOfData{public static void main(String[] args) {char ch ='T'; //'T'的Unicode编码位u0054,0X0054=84int num = 'T'*2;System.out.println("num="+num);}
}
输出:
num=168
字符表示 | Unicode编码 | 说明 |
---|---|---|
t | u0009 | 水平制表符tab |
n | u000a | 换行 |
r | u000d | 回车 |
" | u0022 | 双引号 |
’ | u0027 | 单引号 |
u005c | 反斜线 |
在Java中声明布尔类型的关键字是boolean,它只有两个值 :true和false;
在C语言中布尔类型是数值类型,取值为0和1;而java中boolean类型不是数值类型不能用1和0表示,也不能于其他数值类型进行运算。
自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型转换,在运算中往往是先将数据类型转换为同一类型,然后再进行运算,规则如下:
操作数1 类型 | 操作数2 类型 | 转换后类型 |
---|---|---|
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
有时除了自动类型转换,我们还需要用到强制类型转换,强制类型转换是在变量或常量之前加上"(目标类型)"实现。
例如:
byte byteNum = 100;byte sum = byteNum +1;
这段代码是无法运行的,原因是java的默认整数类型是int类型,就是说第二句代码中的1为int类型,计算时,byteNum被自动转换为了int类型,所以它们的和为int类型,而代码中的sum为byte类型,java无法从int类型自动转换为byte类型所以报错。这是就要用强制类型转换。解决方法如下:
byte byteNum = 2;byte sum =(byte)(byteNum + 1);System.out.println(sum);
输出
3
值得注意的是当大宽度数值转换为小宽度数值时,大宽度数值的高位被截掉,这样会导致数据的精度丢失(如下例)。除非大宽度数值的高位没有数据,就是这个数比较小的情况(上面代码就是这种情况)。
byte byteNum = 127;byte byteSum = (byte)(byteNum+1);System.out.println(byteSum);
输出
-128;
解释如下:
上面计算的二进制形式如下(int类型)00000000 00000000 00000000 01111111
+ 00000000 00000000 00000000 00000001
-------------------------------------------00000000 00000000 00000000 10000000
得到的结果是0b00000000000000000000000010000000,int类型,转化为10进制是128;
然后进行强制类型转换,截取int类型的最后8位,为0b10000000,但是又因为java中所
有的数值类型都是有符号类型,byte的第一位为符号位,因此得出的值为-128,计算机
内的二进制存取和运算不是一两句话能说清的。
在java中除了8中基本数据类型外,其他数据类型都是引用(reference)数据类型,引用数据类型用来表示复杂数据类型,即包含类、接口和数组声明的数据类型。java中的引用数据类型相当于C等语言的指针(pointer)类型,引用事实上就是指针,是指向一个对象的内存地址。
为什么long 类型,float和double的数据要分别在后面加上字母"L",“f"和"d”?
L:由于java的默认整数类型是int,如果不加L说明该数为int类型,因为int类型可以自动转换为long类型,所以当该值不超过int类型的范围时可以不写L;当该数值超过int类型的范围时,必须写L;
long num1 = 300000000; //不会报错
long num2 = 3000000000;//报错 3000000000超出了int范围
long num3 = 3000000000L;//不会报错
f/F:由于java的默认浮点类型是double类型,而从double类型无法自动转换为double类型,所以当float的值为小数时,类型数据声明时一定要加上f/F.
特殊情况:当float的值为整数时,可以不加f/F,原因是int类型可以自动转换成float类型。
float num2 = 1; //不报错 int 类型可以自动转换成float类型
float num1 = 1.1; //报错 double 类型不能自动转换成float类型
float num3 = 2.2f;
float num4 = 2.2F;
d/D:由于java默认的浮点类型是double类型,所以d/D可加可不加
double num = 0.0;
double num1 = 0.0d;
double num2 = 0.0D;
为什么数值的指数表示法是double类型?
本文发布于:2024-02-04 19:00:45,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170714249658592.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |