让我们来看两种赋值方式:
第一种:直接赋值
String name1 = "Tom";
String name2 = "Tom";
System.out.println(name1 == name2);//用来判断name1和name2的地址是否相同,相同为true,不同为false
//此时打印的结果就是:true
之所以会出现这种结果就是:
– 当代码执行到第一行时,会在Java内存区中的常量池里开辟一个空间来存储“Tom”,并有一个地址(假如是0x123),将该地址存储到“栈”里面;
– 当执行到第二行时,会首先在常量池中查找是否有一个“Tom"的字符串,当发现有一个时,就会直接将该字符串(即原有的“Tom”)的地址存储到“栈”中的name2里面;若发现没有,则在常量池中新创建一个空间并将空间地址传给变量。这种赋值方法称为直接赋值,
让我们用一个图来形象的表示一下:
第二种:创建对象赋值
String name3 = new String("Lucy");
String name4 = new String("Lucy");
System.out.println(name1 == name2);
//此时打印的结果就是:false
因为通过上面这种方法来赋值,则每创建一个对象,都会在“堆”中创建一个新的空间,并将地址赋值给变量