问题的起源
问题代码
/**
* 该代码是我模拟的问题代码。
*/
public class Demo {
public static void main(String[] args) {
// 定义两变量
Integer num1 = 128;
Integer num2 = 128;
// 进行比较
if(num1 == num2){
System.out.println("num1等于num2");
} else {
System.out.println("num1不等于num2");
}
}
}
那么请问是输出相等还是不等呢??
解决方案
先保留疑问我先提供解决方案
public static void main(String[] args) {
// 定义两变量
Integer num1 = 128;
Integer num2 = 128;
// 解决方法特别简单我们将==换成equals()方法,此时问题迎刃而解。
if(Objects.equals(num1, num2)){
System.out.println("num1等于num2");
} else {
System.out.println("num1不等于num2");
}
}
解惑
有没有人很不解?明明看着相同的两个数为什么不同那?其实很简单,java中 == 比较的是地址值。当Integer的值在-128至127之间时,Integer对象是在IntegerCache.cache中产生会复用已有对象。当超过这个范围时产生的对象是在堆内存中,就不会复用已有的对象。所以用 == 比较就会出现问题。建议大家使用整形包装类比较时统一都使用equals方法。
欲戴王冠,必承其重。哪有什么好命天赐,不都是一路披荆斩棘才换来的。