java基础复习一:int与Integer

来源:互联网 发布:js获取指定的时间戳 编辑:程序博客网 时间:2024/06/06 01:27

java的一些基础总是忘记,有必要写一遍加深一下记忆。

int是java的基础类型,4个字节,在java.lang这个包中。
Integer是int的包装类,可以在一些需要使用int,但又没法用的地方代替int使用。

比较大小

– **如果两个变量都是int类型的,不存在任何异议

        int a = 2;        int b = 2;            System.out.println(a == b);

结果:

true

如果是两个变量都是Integer类型的

        Integer a = 2;        Integer b = 2;            System.out.println(a == b); 

执行结果:

true

改一下:

        Integer a = 127;        Integer b = 127;        System.out.println(a == b);

结果:

true

再改一下:

        Integer a = 128;        Integer b = 128;            System.out.println(a == b);

结果:

false

再改一下:

         Integer a = -128;        Integer b = -128;            System.out.println(a == b);

结果:

true

再改一下:

         Integer a = -129;        Integer b = -129;            System.out.println(a == b);

结果:

false

可以看到== 比较大小,对于Integer不是完全适用,只试用于-128-127,也就是一个低位字节。Integer赋值的时候,会判断时候超出这个范围,如果超出了就新建一个对象, 不同的对象有不同的引用地址,所以==为false;
虽然很多人都知道这个,但是在项目组还是有很多人犯这个错。

这是检查数值大小的源码:

 if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);

如果超出这个范围,可以使用自动拆箱装箱,比较大小,如下:

Integer a = 129;        int b = 129;        System.out.println(a == b);

结果:

true

总结

如果两个Integer比较大小,这样写Integer == Integer.intValue(),这样就不要考虑数值范围的问题了。
如果int与Integer比较,统一用==就行了。