数据类型
基本数据类型
整数默认int;小数默认double
整数:
- byte 1字节 [-128 ~ 127]
- short 2字节 [-2^15 ~ 2^15 -1]
- int 4 [-2^31 ~ 2^31 -1]
- long 8 [-2^53 ~ 2^53-1]
浮点
- float 4 [-3.403E38 ~ 3.403E38]
- double 8 [-1.798E308 ~ 1.798E308]
字符
- char
布尔
- boolean
引用数据类型
- 类(class)
- 接口(interface)
- 数组([ ])
赋值不能超出类型的合法值表示范围;
不同类型变量之间的运算和赋值,编译器禁止将大类型的值直接赋给小类型;
对于JVM来说,它要求参与运算的数量之间,必须是同一种类型。int + byte时,JVM会将byte变量读取出来,变成一个int类型的量。
类型之间默认转换规则:
boolean类型的值不能转换为其他类型;
byte/short/char -> int ->long -> float -> double;
byte、short、char相互之间不能转换。运算首先转换为int
强制转换
byte a = (byte)(intValue + byteValue);可以
byte c = (byte)129 输出:-127
原因:129 = 0,10000001(补码) ;9位 。c会被截断,只能装8位,也就是低8位(10000001)。最高位是符号位(1,0000001)取反+1(1,1111111)= -127
正数的补码就是其原码!
面试题
1。
byte b1 = 1, b2 = 2, b;
b = b1 + b2;--------------①
b = 1 + 2;----------------②
①会报错:byte类型的值参与运算,会首先转换成int。(byte、short、char相互之间不能转换。运算首先转换为int)
②不会:编译器简单判断了一下,如果换成202,就会报错。
2。
语句byte b = 300,能编译通过吗,如果不能,如何转换以及转换之后的值是多少?
不能,因为300超出了byte的合法值表示范围。可以通过强制转换让他通过。
转换之后的值为44.
原因:300 = 100101100(二进制,最高位1被截断,取低8位,即0,0101100,因为是正数,所以不需要取反+1,
转换成十进制就是44。.