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类型没法比较。

 

 

相关文章
BigDecimal类型讲解
如何在Java中使用BigDecimal数字类型,你真的掌握了嘛??
134 0
|
8月前
|
Integer对象范围(-128-127)之间(Integer. valueOf()方法)
Integer对象范围(-128-127)之间(Integer. valueOf()方法)
|
7月前
包装类(Integer举例)
包装类(Integer举例)
Java 中表示整数的包装类Integer(详解)
Java 中表示整数的包装类Integer(详解)
Java中BigDecimal比较大小的方法BigDecimal转换为Integer
Java中BigDecimal比较大小的方法BigDecimal转换为Integer
117 0
Boolean包装类型
博主今天在工作中发现了Boolean包装类型的使用,由此整理了相关内容,下面我们一起来看下吧。
197 0
Boolean包装类型
Java数据类型中String、Integer、int相互间的转换
Java数据类型中String、Integer、int相互间的转换
211 0
Object类型转换为long或者Long
1.转换为long Object o = new Object();long l = Long.valueOf(String.valueOf(o)).longValue();   2.转换为Long Object o = new Object();long l = Long.
3783 0
Integer包装类特殊之处
Integer包装类特殊之处
79 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等