有关于JAVA string类的问题
最近在学JAVA,在学习string类的时候遇到了一些问题:
如String a=new String(“abc”);
这个语句创建了两个对象,一个放在堆中,一个在字符串池中。然后引发了疑问
1.如String a=new String(“abc”);
String b=new String(“abc”);
这两个语句是否只是创建了3个对象?我的解释是因为第二句中的“abc”,由于第一句的缘故在字符串池中已经创建。
2.如
String a=new String(“abc”);
String b=new String(“abc”);
String c=“abc”;
此时依然只创建了3个对象。
即我的理解是,当“abc”在字符池中时,可以被共享,无论是在栈中的引用,还是堆中的对象。
请大虾指点
[解决办法]
执行:
String a=new String(“abc”);
String b=new String(“abc”);
是创建了3个对象,
执行:
String a=new String(“abc”);的时候,字符池中先去找a,b,c三个字符,构建一个字符串abc
将其指给a这个引用变量,此时已经出现两对象.
再执行 String b=new String(“abc”);就是创建第三个对象。
[解决办法]
String a=new String(“abc”);
abc 是字符串的常量
出现“abc”
就在内存中创建了这个字符串
把它用new关键字给了a时
等于是创建一个新的对象a
所以是两个对象
String b=new String(“abc”);就是创建第三个对象。