Integer的比较和注意点

简介: Integer的比较和注意点

先看代码:

    public static void main(String[] args) {
        Integer a = new Integer(175);
        Integer b = new Integer(175);
        Integer c = new Integer(120);
        Integer d = new Integer(120);
 
        Integer z = 175;
        Integer x = 175;
        Integer n = 75;
        Integer v = 75;
        System.out.println("a.equals(b) : "+ a.equals(b));
        System.out.println("a==b: " +(a==b));
        System.out.println("c.equals(d) : "+ c.equals(d));
        System.out.println("c==d: " +(c==d));
        System.out.println("z==x: "+ (z==x));
        System.out.println("n==v: "+(n==v));
        System.out.println("z.equals(x): "+ z.equals(x));
        System.out.println("n.equals(v): "+ n.equals(v));
    }

结果:

a.equals(b) : true
a==b: false
c.equals(d) : true
c==d: false
z==x: false
x==v: true
z.equals(x): true
n.equals(v): true

什么原因呢:

Integer有个缓存机制 : -128~127

也就是说,当你声明两个Integer 对象(不使用new)时,如果值是在此范围之内, 使用"==" 结果是true ,但是一旦超过了此范围,则会在堆中重新声明一块地址,此时再用"==" 结果就会返回false

并且 使用"==" 比较两个值相等的使用 new Integer() 生命的对象时,即使值相等,结果也依然是false。因为这两个Integer对象其实是指向两块不同的内存地址的。 有点像String类型。

推荐 : 使用 equalse 比较两个 Integer的值

因为 使用equals 比较不管使用哪种声明方式,结果都可以理解为是比较声明的对象的值。

来看《阿里巴巴Java开发手册》的建议:

image.png

目录
相关文章
|
5月前
|
Java API
将`List<String>`转换为`List<Long>`
将`List<String>`转换为`List<Long>`
|
6月前
|
Java
Integer类超详解-2
Integer类超详解
39 0
|
6月前
|
Java 编译器
Integer类超详解-1
Integer类超详解
85 0
|
人工智能 Java 数据库
BigDecimal 转 String
BigDecimal 转 String
154 0
|
缓存 Java API
Integer和int的区别
Integer和int的区别
|
安全
Synchroinzed对Integer的问题
Synchroinzed对Integer的问题
118 0
Synchroinzed对Integer的问题
|
存储 缓存 Java
【每天一道面试题】Integer、 new Integer() 、int的==比较,你全都了解吗
【每天一道面试题】Integer、 new Integer() 、int的==比较,你全都了解吗
155 0
【每天一道面试题】Integer、 new Integer() 、int的==比较,你全都了解吗
|
Java
Java数据类型中String、Integer、int相互间的转换
Java数据类型中String、Integer、int相互间的转换
196 0
|
存储 Java
int 和 Integer 有什么区别
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
64 0