Integer是一个包装类,可以自动拆箱,只能实例化后使用默认值为null,取值范围在-128-127之间
今天遇到一个问题就是Integer在大于127之后的变化
Integer param1 = 200;
Integer param2 = 200;
if (param2==param1){
System.out.println("相等");
}else {
System.out.println("不相等");
}
控制台返回的是不相等。然后我又换了两个小于127的打印了一下
Integer param1 = 10;
Integer param2 = 10;
if (param2==param1){
System.out.println("相等");
}else {
System.out.println("不相等");
}
控制台返回的是相等。
经过查询相关源码和资料得出了结论Integer对象赋值在-128-127这个区间时,缓存会为我们保存这个变量,而超出了这个值就会在堆中产生一个新的对象,本身Integer就是一个对象,所以控制台就会打印出不相等的现象,官方也给出了对应的解释,小的数据适应频率会提高,同时缓存下来,为了优化所以采取这个方案。
所以当遇见Integer两个值进行比较的时候==可能会导致程序执行结果有问题,采取equal方法进行比较
Integer param1 = 200;
Integer param2 = 200;
if (param2.equals(param1)){
System.out.println("相等");
}else {
System.out.println("不相等");
}