解析String s="a" 和 String s1=new String("a")生成时,内存中的变化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fubo1990/article/details/51434487

String s="abc"  

s是栈内变量,它的内存保存的是常量池的常量字符串对象对象"abc"的地址。常量池中的每个值只有一份。String s2 = "abc";

s和s2两个变量指向的是同一个地址,因此s==s2结果为true


String s1=new String("abc");

s1是栈内变量,它的内存保存的是堆中的new String对象的地址,new String在堆中生成对象,并用常量池的字符串对象"abc"初始化堆中的对象,所以堆中的对象的内存的内容和常量池对象的内存的内容一样,但是是不同的两个对象

因此s==s1的结果是false。==比较的是两对象的引用,因此结果为false.

s.equals(s1)的结果是true,因为String的equals方法比较的是对象的内容。

猜你喜欢

转载自blog.csdn.net/fubo1990/article/details/51434487