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;//正确
  • 相关考题及答案分析
  1. 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)
  2. int 和 Integer 有什么区别?
    1.Integer是int的包装类
    2.int默认值是0;Integer默认值null
  3. 我们能将 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
  4. a = a + b 与 a += b 的区别
    参考:https://blog.csdn.net/zq602316498/article/details/38777509
    1
    .执行效率问题:不考虑编译器的优化的话,a=a+b的执行效率是低于a+=b
    2.类型转换问题:+= 会包含隐式类型转换
  5. 存在使i + 1 < i的数吗
    存在,比如i=Integer.MAX_VALUE,i+1溢出变成负数了
  6. 存在 a > b || a <= b 不成立的数吗
    存在,Double.NaN 和 Float.NaN
  7. 0.6332的数据类型是()
    A:float B:double C:Float D:Double

    答案:B  解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f

posted @ 2019-06-28 16:44  落荒的石头  阅读(382)  评论(0)    收藏  举报