标题: 旧题重谈,String s = new String("abc");的一点看法。 [打印本页] 作者: 李建强 时间: 2012-10-2 22:53 标题: 旧题重谈,String s = new String("abc");的一点看法。 String s = new String("abc");
很多人都知道是创建了两个对象。
一个是常量池中的常量,一个是堆中new出的对象。
String s = "abc";
这句代码过程大致:
String s创建一个引用,JVM去pool寻找"abc",找到后指向,
找不到创建对象、放进常量池再返回指向,判断依据是equals。
String s = new String("abc");
这句代码过程大致:
String s创建一个引用,JVM去pool寻找"abc",找不到就创建,
注意这里找到找不到都不指向。接着在堆中创建了一个字符串对象,引用指向了堆中对象。
OK,我写了这么多,我想说的是如果常量池中存在了字符串常量,
那么String s = new String("abc");就只会在堆中创建一个对象了吧?
这种情况适用于:
String s = "abc";
String s = new String("abc"); 这时候第二句就只创建了一个对象?不知道这样说理解是否有误,请高手指教。