1.只要记得 “==“是比较的两个对象的引用,是个地址值,有内存分配的。
2.上面的是在常量池中创建了一个字符串对象“abc”,并且分配了一个地址值,然后str1指向它,str2创建时,因为对象存在于常量池中,内存就不再创建新的“abc”,而是将str2指向它,所以两个的地址值是一样的,即为true;
3.下面这个,new String(),JVM就会在栈内存中开辟一个新的空间,并且有一个地址值,给这个对象赋值时是将字符串"abc"的地址赋给了它。所以,String str2 = new String("abc");内存中有两个对象,str2指向来栈内存中的那个String对象。而str1指向的是“abc”的引用,两个指向的地址值不同,所以为false。 |