java子字符串方法的返回对象在哪里创建



,下面的代码:

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也是如此,它们是两个不同的对象。

最新更新