开始也搞不懂,在网上找了很多资料。总结如下,希望能帮到。- public class TestDemo2 {
- public static void main(String[] ags){
- String a=new String("abc"); //先看字符串池,发现池中没有相同值的字符串,然后在堆内存中创建一份,但是不会从堆中复制到池中,把它在堆内存中的地址赋给a
- String b="abc"; //比较字符串池发现没有相同字符串,则在字符串池中创建"abc",把它所在字符串池中的地址赋给b
- String c="abc"; //b和c指向同一个对象(字符串池地址)
- System.out.println(a==b);//false,地址值不同,打印false
- System.out.println(b==c);//true,地址值相同,打印true
-
- Integer i1=1;
- Integer j1=1; //i1和j1指向同一个对象
- Integer k1=new Integer(1); //重新开辟一个堆内存地址
- System.out.println(i1==j1);//true,两个地址相同,打印true
- System.out.println(i1==k1);//false,两个地址不同,打印false
-
- Integer i=1; //引用数据类型,在堆内存中
- int j=1; //基本数据类型,在栈内存中
- Integer k=new Integer(1); //在堆内存中重新开辟内存
- System.out.println(i==j);//true,jdk1.5后自动拆箱、装箱,i和j比较,转换成同一类型(int型),它们值相等,所以打印true
- System.out.println(k==j);//true,也都转换成int型,值相同,打印true
- System.out.println(i==k);//false,两个引用数据类型,因为有一个是new出来的,所以地址不同,打印false
- }
- }
复制代码 |