哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址????

一、内存引用知识

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

Guess you like

Origin blog.csdn.net/wyn_365/article/details/120312114