Java Integer == 以及分析

Posted stdpain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Integer == 以及分析相关的知识,希望对你有一定的参考价值。

Java Integer ==

先看一下这段代码

Integer integer1 = 100;
Integer integer2 = 100;
System.out.println("integer1 == integer2:"+(integer1==integer2));
Integer integer3 = 1000;
Integer integer4 = 1000;
System.out.println("integer1 == integer2:"+(integer3==integer4));

输出结果:

很久之前就知道这里有个坑,今天看到别人分析了一下Integer.java的源代码才知道具体是为什么

Integer.java

可以看出来使用Integer.valueOf(i)的时候并不会立即new一个Integer对象,而是先判断是否在缓存数组里面

不知道称作缓存是不是不太合适

IntegerCache是一个嵌套类(静态内部类)

在静态初始化块中完成的初始化,在这里确定的范围是-128~127

包装器获取的时候会调用 Integer.valueOf(i)

Java核心技术里面有提到,之前一直也没注意

所以直接new 创建一个Integer 使用==比较还是会false

Integer integer = new Integer(100);
System.out.println("integer1 == integer2:"+(integer1==integer));

integer1 == integer2:false

为了以后避免这种坑,还是使用 equals比较好

当然,要判断 == null

以后遇到问题还是多看一下源码比较好

以上是关于Java Integer == 以及分析的主要内容,如果未能解决你的问题,请参考以下文章

JAVA——底层源码阅读——包装数据类型Integer.valueOf()自动装箱方法底层源码分析

20个非常有用的Java程序片段

Integer面试连环炮以及源码分析

Java程序片段

hashmap冲突的解决方法以及原理分析:

Java面试题5 Integer的int 的种种比较?详细分析