Integer类型的比较

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()去比较“对象型数据”,避免使用==时出现上述错误。

猜你喜欢

转载自blog.csdn.net/qq_35760825/article/details/128336374