java substring方法的返回对象在哪里创建?

时间:2018-04-16 14:59:51

标签: java

,以下代码:

String str1 = "SachinTendulkar";
String str2 = str1.substring(6, str1.length());
String str3 = "Tendulkar";

str2和str3中的值是相同的,但是它们没有引用相同的对象,究竟发生了什么,str2对象在哪里创建?

提前致谢。

2 个答案:

答案 0 :(得分:1)

String str2 = str1.substring(6, str1.length());

上面的行将创建一个新的Object,但是String str3 = "Tendulkar";是String文字,可以重用string constant pool中的实例。字符串文字默认为intern String对象,默认情况下,使用new String创建String对象不是intern。 现在,如果使用new String("Some String")创建对象,它将在堆中显式创建新的String对象。现在让我们看一下它返回的String#substring方法,如下所示。这意味着它将在每次成功执行时创建一个新的String对象。

return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);

答案 1 :(得分:0)

String是唯一可以使用字符进行实例化的类,这意味着它就像你写的一样     String str2 = new String(str1.substring(6,str1.length())); 所以基本上str2是String类的新实例,str3也是如此,它们是两个不同的对象。

相关问题