1 包装类的对比使用equal而不是==
对于 Integer var = ? 在-128 至 127 范围内的赋值, Integer 对象是在IntegerCache . cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。
public static void main(String[] args) {
Integer a = 127;
Integer b = getInteger(a);
System.out.println(a);
System.out.println(b);
System.out.println(a==b);
}
public static Integer getInteger(Integer i) {
Integer i1 = i + 1;
Integer i2 = i1 - 1;
return i2;
}
这样返回的数就是false
public static void main(String[] args) {
Integer a = 127;
Integer b = getInteger(a);
System.out.println(a);
System.out.println(b);
System.out.println(a==b);
}
public static Integer getInteger(Integer i) {
Integer i1 = i + 1;
Integer i2 = i1 - 1;
return i2;
}
这样则是true