本帖最后由 何旭程 于 2013-3-12 20:30 编辑
String s1 = "abc";
String s2 = new String("abc");
第一句执行时,会先在字符串常量池中查找是否已经存在了值为"abc"的对象,它的判断依据是Stringequals(Object obj)方法的返回值,如果有,则不再创建新的对象,如果没有,则先创建这个对象,然后把它加入到字符串常量池中,将引用变量s1指向这个对象;
第二句执行后内存中有两个对象,一个由new String("abc")中的"abc"在字符串常量池里生成一个值为"ABC"的对象,第二个由new在堆里产生一个值为“abc”的对象,该对象完全是字符串常量池里的"abc"的一个拷贝,引用变量变量s2最后指向堆中产生的"abc"对象。 |