简介
从源码出发, 分析Java Integer
类的"128陷阱"问题, 以此掌握更多的Java的细节, 深化我们对Java语言的理解
正文
开门见山, 所谓**"128陷阱"指的是当我们比较两个Integer
对象时, 会出现明明不是同一个对象, 却可以相等的问题**, 下面我们来具体分析
public class Test {
public static void main(String[] args) {
Integer a1 = 10;
Integer a2 = 10;
System.out.println(a1 == a2);
}
}
/*
输出结果
true
*/
在上述代码中, 利用JDK的自动装箱语法糖, 用整型10
得到了一个Integer
对象a1
,
随后, 使用==
来判断两个对象是否相等, 并输出结果
众所都周知, 当使用==
来判断两个对象是否相等时, 得到的结果并不是我们通常意义上的是否相等
(我们通常意义上的相等是判断这两个Integer
对象的value
(值)是否相等)
而是判断两个对象是否是同一个,
说的准确一点, 是判断a1
和 a2
这两个引用指向的是否是同一个地址, 如果是, 返回 true
, 否则返回false
再看我们的代码, a1
和a2
这两个对象, 应该是两个独立的, 互不影响的对象, 那为什么 ==
的结果是true
呢?
我们再看以下代码
public class Test {
public static void main(String[] args) {
Integer a1 = 1000;
Integer a2 =