Java中的数据类型(四类八种):
1、整型
byte 、short 、int 、long
2、浮点型
float 、 double
3、字符型
char
4、布尔型
boolean
基本类型之间的转换:
将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean类型与其他7中类型的数据都不能进行转换,这一点很明确。但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。转换分为自动转换和强制转换:
自动转换(隐式):小的数据类型转换大的数据类型,无需任何操作。
强制转换(显式):大的数据类型转换小的数据类型,需使用转换操作符。
将6种数据类型按下面顺序排列一下:
double > float > long > int > short > byte
如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制转换。
面试题:(以下运行会出错吗)
(1)第一题:
byte b1=3, b2=4;
b=b1+b2;
会,出错因为在JAVA虚拟机中默认是int类型转换,虚拟机不知道b1,b2中的数值到底是多少,所有会抛出可能损失精度的错误;虚拟机会把 b1,b2 转换成 int类型在进行运算,两个int类型的数值相加结果任然是int类型,int类型 不能赋值给 byte类型
b=3+4;
正确 ,因为他们都是常量,具有常量类型优化机制,可以直接识别为byte,两个常量相加,先计算常量值,然后判断是否满足类型范围,再赋值。
(2)第二题:
byte by = 130;有没有问题?有问题如何解决?结果是多少呢?
有问题,byte 的数值范围是 126~-127 ,130已经超出byte取值范围 ,需写成byte by = (byte)130,运算是会砍掉前面的 三个8位,结果会变成-126
(3)第三题:
byte b=10;
b++; //这句 java虚拟机会做一个自动转换动作 相当于 b=(byte)(b+1)所以不会报错
b = b + 1; //这句java虚拟机会把,b转换成int类型 相当于 int b +int 类型的1 然后赋值给Byte类型 int是4个字节 byte是1个字节所有会抛出损失精度。
希望能对你有一点帮助,如有问题,可在下方留言!
领取专属 10元无门槛券
私享最新 技术干货