首先,这个问题的前提是Integer类型会自动装箱和自动拆箱.并且在-128到127的范围内,自动装箱不会创建新的对象,而是从常量池中获取.
二.==号比较引用数据类型时,比较的是地址值.
第一题:Integer a = 1000; Integer b = 1000;
a和b分别在堆内存中开辟一个新的地址值.所以结果为false.
第二题:Integer a = 100; Integer b = 100;
因为在-128~127的范围内,不会在堆中创建新的对象,而是从常量池中获取值,两者指向一样.所以结果为true.
第三题.Integer a = new Integer(1000);Integer b = 1000;
a没有利用自动装箱的特性,直接在堆中开辟一个新的地址值.而b是利用自动装箱特性,,把基本数据类型转换为对象,在堆中开辟新的地址值.实际上和第一题没什么区别.两者地址值不同,结果false.
第四题:Integer a = new Integer(10);Integer b = new Integer(10);
这两个压根没有利用自动装箱的新特性,相当于两个都是在堆中开辟新的地址值.地址值不同,所以结果为false.
|