,下面的代码:
String str1 = "SachinTendulkar";
String str2 = str1.substring(6, str1.length());
String str3 = "Tendulkar";
str2 和 str3 中的值相同,但它们引用的对象不同,到底发生了什么,str2 对象在哪里创建?
提前谢谢。
String str2 = str1.substring(6, str1.length());
上面的行将创建一个新的对象,但是String str3 = "Tendulkar";
是字符串文字,并且可以重用string constant pool
中的实例。默认情况下,字符串文本intern
字符串对象,默认情况下不intern
使用 new String
创建字符串对象。现在,如果您使用 new String("Some String")
创建一个对象,它将在堆中显式创建一个新的String
对象。现在让我们看一下它返回String#substring
方法,如下所示。这意味着每次成功执行时,它都会创建一个新的字符串对象。
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
字符串是唯一可以使用字符实例化的类,这意味着它就像你写的一样 字符串 str2 = new String(str1.substring(6, str1.length((((;所以基本上str2是String类的新实例,str3也是如此,它们是两个不同的对象。