String str1 = new String("abc");
String str2 = "abc";
String str3 = "abc";
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。所以str1==str2的值为false,str3==str2的值为true,因为当str3引用的“abc”已近在栈内存中。忘说了, 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。 |