Integer这个包装类是个妖孽

简介:  给大家出一道小儿科的题:public class TestInteger { public static void main(String[] args) { Integer a = 1;...

 

给大家出一道小儿科的题:
public class TestInteger {
    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        long h = 2L;
        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a+b));
        System.out.println(c.equals(a+b));
        System.out.println(g == (a + b));
        System.out.println(g.equals(a + b));
        System.out.println(g.equals(a + h));
    }
}
答案是多少呐,你一定在嘀咕这还不简单呐,答案是

true

true

true

true

true

false

如果你这样想,我只能说你还太嫩,首先不公布答案呐,最后在公布,先分析分析

1.我们知道在编码的时候能不用integer就不用这种包装类,因为它有个装箱和拆箱的过程,会浪费时间,

2.Integer的缓存范围大家想必都知道就是-128(-2的7次方)到127(2的7次方-1)超出这个范围就会在堆中重新分配内存,所以比较的值超出这个范围地址就会不一样

------------------------------------------------------------------------------------

再来说一下==这种运算法的比较,它的比较会先比较地址值,

如果比较的一边有操作表达式,会比较数值

------------------------------------------------------------------------------------

再来说一下equals

它在比较的时候会优先比较数值

但是Long类型的equals会首先判断是否属于Long,

------------------------------------------------------------------

好了公布正确答案

true
true
true
true
true
false
true

最后一个的解释是,a+h,a是Integer,h是Long,在进行运算时,会自动转化为Long类型的进行运算,所以是true

而倒数第二个a+b都是intrger类型的,所以不会进行转化,所以还是Integer类型的与Long类型没法比较。

 

 

相关文章
|
Java
包装类的使用
包装类的使用
59 0
|
5月前
包装类(Integer举例)
包装类(Integer举例)
|
6月前
|
Java 编译器
Integer类超详解-1
Integer类超详解
75 0
|
6月前
|
Java
Integer类超详解-2
Integer类超详解
36 0
|
6月前
|
Java
Java 中表示整数的包装类Integer(详解)
Java 中表示整数的包装类Integer(详解)
|
缓存
包装类
包装类
66 0
|
存储 缓存 Java
【Java】int和Integer的区别?为什么有包装类?
【Java】int和Integer的区别?为什么有包装类?
|
安全
Synchroinzed对Integer的问题
Synchroinzed对Integer的问题
117 0
Synchroinzed对Integer的问题
Zp
|
缓存 Java
Integer的比较和注意点
Integer的比较和注意点
Zp
90 0
Integer的比较和注意点
|
Java 大数据
6、包装类及其相关
包装类及其相关
133 0
6、包装类及其相关