一、内存引用知识
1.内存引用地址,是指栈中存放的地址,来指向堆中的某个位置。
2.int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法
二、常见比较
2.1 int与Integer、new Integer()进行==比较时,结果永远为true
1.Integer与int比较时,Integer会有拆箱的过程,我们可以看看拆箱的代码:
@Override
public int intValue(){
return value;
}
直接返回的就是value,因此int与Integer以及new Integer()进行 ==比较时结果都是true。
2.2 Integer与new Integer()进行==比较时,结果永远为false
Integer a=n时,如果n大于等于-128小于等于127时,会直接从IntegerCache中取,不在这个范围内,会new一个对象,所以Integer与new Integer进行 ==比较时,结果都是false。
2.3Integer与Integer进行==比较时,看范围;在大于等于-128小于等于127的范围内为true,在此范围外为false。
Integer与Integer比较,需要看范围,如果在-128~127(包含-128,不包含127)范围内,因为都是从IntegerCache中取值,所以相等;若不在这个范围内,则都要去new一个对象,所以结果为false。
2.4 new Integer() 与 new Integer() 永远都是false
这是在堆内存中创建的两个不同的对象,不可能比较的地址相同的
三、代码总结
public static void main(String[] args) {
// 1.int 与 任何类型 相比 都是 true
int a1 = 127;
Integer a2 = 127;
System.out.println(a1 == a2); // true
int a3 = 127;
Integer a4 = new Integer(127);
System.out.println(a3 == a4); // true
int a5 = 128;
Integer a6 = 128;
System.out.println(a5 == a6); // true
int a7 = 128;
Integer a8 = new Integer(128); // true
System.out.println(a7 == a8);
// 2.Integer 与 Integer相比 127之间为true 大于就是false
Integer a9 = 127;
Integer a10 = 127;
System.out.println(a9 == a10); // true
Integer a11 = 128;
Integer a12 = 128;
System.out.println(a11 == a12); // false
// 3.Integer 与 new Integer()相比 永远false
Integer a13 = 127;
Integer a14 = new Integer(127);
System.out.println(a13 == a14); // false
Integer a15 = 128;
Integer a16 = new Integer(128);
System.out.println(a15 == a16); // false
}
true
true
true
true
true
false
false
false
评论