,以下代码:
String str1 = "SachinTendulkar";
String str2 = str1.substring(6, str1.length());
String str3 = "Tendulkar";
str2和str3中的值是相同的,但是它们没有引用相同的对象,究竟发生了什么,str2对象在哪里创建?
提前致谢。
答案 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也是如此,它们是两个不同的对象。