Java篇
疑问:
为什么在以下代码中,一个结果为true,而另一个则为false?
Integer int1 = 127;
Integer int2 = 127;
System.out.println(int1 == int2); //true
Integer int3 = 128;
Integer int4 = 128;
System.out.println(int3 == int4); //false
解答:
- 因为 Java 默认会比较数据在 JVM 堆中的地址,而 JVM 会将 Integer 转成 int 来进行比较,恰巧在 Integer 类中提供了内部静态类 IntegerCache 用来自动拆箱和装箱,数值范围为
-128 ~ 127
。 - 所以当比较的值在此区域时,Java 不会创建新对象,两者相等。
- 当比较的值不在此区域内时,Java 会分别创建新的对象,所以两者不相等。
结论
我们应尽力使用.equals()
去比较“对象型数据”,避免使用==
时出现上述错误。