基本数据类型面试题收集

房东的猫 提交于 2020-03-08 10:21:42
short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?**

short s1=1;s1=s1+1
在这里插入图片描述
这编译时就报错了;因为short,char,byte 在运算时会自动转成int类型; i+1表达式的类型为int,将int赋值给short,会报出丢失精度错误
我们可以强转解决这个问题

short i = 1;
i = (short) (i+1);

short s1=1;s1+=1; 没有错;+=是Java语言规定的运算符,Java会对它进行特殊处理—强制类型转化

byte a = 127; a+=5; System.out.println(a); 请问输出结果是什么?

这个画图比较好解释
在这里插入图片描述
128表示-128;而132则表示-124

java 的 Integer 和 int 有什么区别?
  • int 是基本数据类型,Interger是int的封装类,提供了一些对整数的操作方法;
  • int 修饰 参数,或者是成员变量时,默认值是0;Integer 默认是null;
java 中 3*0.1 == 0.3 将会返回什么?true 还是 false?

false; 浮点数不能完全精确表现出来,一般会损失精度

java 中 float f = 3.4; 是否正确?

错误,3.4 是double,赋值给float会丢失精度,除非强转

能否在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量?

不能,丢失精度。

Integer i1 = 200;
Integer i2 = 200;

System.out.println(i1== i2);
Integer i3 = 100;
Integer i4 = 100;
System.out.println(i3==i4);

答案:false,true ;;这里主要考查自动封装和IntegerCache缓存池;
Integer i1 = 200 它会调用Integer i1 = Integer.valueOf(200)

  public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

在创建前它会检查参数是否在缓存池范围中,即-128 ~127;如果属于这个方位,那么直接从数组中取,那么就不用new 一个。

 private static class IntegerCache {
 		//最小值	
        static final int low = -128;
        //最大值
        static final int high;
        //这个缓存池实际上是个Integer数组类型
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            }
            high = h;
            // 创建缓存池;大小:(high - low) + 1
            // 数组索引是没有负数的, cache[0] = -128   
            cache = new Integer[(high - low) + 1];
            int j = low;
            //遍历赋值
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

200 超出缓存池范围,所以两次new Integer(200);new 是在内存中开辟新的空间,地址肯定是不相等的。 == 比较引用类型,就是比较引用对象地址是否相同。
100 在缓存池范围内,Intege i3 = IntegerCache.cache[100+128];Intege i4 = IntegerCache.cache[100+128]。引用对象地址相同

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!