美文网首页
Java基础中Integer值用==和equal判断相等问题

Java基础中Integer值用==和equal判断相等问题

作者: leoryzhu | 来源:发表于2020-09-17 19:44 被阅读0次

一、Integer equals()方法判断的是两个Integer对象值是否相等

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

二、Integer==判断两个对象的地址是否相等

2.1 两个通过new Integer()的对象

    Integer a= new Integer(200);
    Integer b= new Integer(200);
    System.out.print(a==b);

输出false
通过new 一个对象会为对象分配一个地址,不同的new会生成不同的地址

2.2 两个通过赋值的对象

分下面两种对象

    Integer a= 200;
    Integer b= 200;
    System.out.print(a==b);

输出为false

        Integer a= 100;
        Integer b= 100;
        System.out.print(a==b);

输出为true
通过赋值的生成对象会自动封箱,会经过Integer valueOf()方法

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

可以看出在-128-127之间会取缓存池里的缓存对象,同一个值只有一个缓存对象。
所以通过赋值生成的对象会自动封箱
a 如果值为-128-127之间会取同一个地址,两个对象相等,如果不在之间则会new 一个对象,两个地址不相同

2.3 一个对象一个基本类型

        Integer a= 200;
        int b= 200;
        System.out.print(a==b);

输出为true
比较时对象a会自动卸箱,相当于调用了

public int intValue() {
        return value;
    }

比较是值

相关文章

网友评论

      本文标题:Java基础中Integer值用==和equal判断相等问题

      本文链接:https://www.haomeiwen.com/subject/mqhryktx.html