java数据类型整理成表&强转&一些面试问题
参考:https://www.jianshu.com/p/fc7670bba1fd
- 参考上文整理表格如下:

基本数据类型默认的整数型是int;浮点型是double
- 数据类型之间转换(图片来源篇首连接)

在类型自动提升中,byte->char,char->short 会报错,需要强转
原因:byte和short是是数值型的变量,char字符型的变量。数值型变量有符号(第一位)而在char中则无正负之分,byte转short自然就是可以的了
int it = 1; byte b0 = it;//错误 这里需要强转 byte b1 = 1;//1会被默认为int 但是在byte取值范围内,会发生隐式转换 所以不会报错 char c1 = b1; //错误 byte自动升级char失败 char c2 = (char) b1; //正确 short st1 = c2;//错误 char自动升级short失败 short st2 = (short) c2;//正确 short st3 = b1;//正确 float fl1 = 4.0; //错误 double和float之间不会自动隐式转换,因为存在精度问题 float fl2 = (float) 4.0;//正确
- 相关考题及答案分析
- short s1 = 1; s1 = s1 + 1;对还是错 为什么? short s1 = 1; s1 +=1;对还是错 为什么?
s1 = s1 + 1;编译错误,此时s1上升为int,int向下转型到short需要强转
s1 += 1;编译正确;java虚拟机优化成 s1 = (short)((int)s1 + 1) - int 和 Integer 有什么区别?
1.Integer是int的包装类
2.int默认值是0;Integer默认值null - 我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?
如果int值在byte取值范围内,强转正常并且值也正确;
如果int值在byte取值范围外,值会发生变化,因为向下强转,会直接抛弃高位
比如,int i = 256 转二进制是0000 0000 0000 0000 0000 0001 0000 0000 强转byte(8bit)直接去掉高位得到二进制0000 0000 0000 0000 0000 0001 0000 0000,此时强转byte值是0 - a = a + b 与 a += b 的区别
参考:https://blog.csdn.net/zq602316498/article/details/38777509
1.执行效率问题:不考虑编译器的优化的话,a=a+b的执行效率是低于a+=b
2.类型转换问题:+= 会包含隐式类型转换 - 存在使i + 1 < i的数吗
存在,比如i=Integer.MAX_VALUE,i+1溢出变成负数了 - 存在 a > b || a <= b 不成立的数吗
存在,Double.NaN 和 Float.NaN - 0.6332的数据类型是()
A:float B:double C:Float D:Double
答案:B 解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f

浙公网安备 33010602011771号