可能重复:
What is the purpose of the expression “new String(…)” in Java?
它是不可变的,为什么你需要调用String.String(String str)
?
答案 0 :(得分:15)
来自API doc:
Unless an explicit copy of original is needed, use of this constructor is
unnecessary since Strings are immutable.
我能想到的唯一原因是:
String
:A。substring
的实现,您会看到它引用相同的char []数组作为原始字符串。String
A超出了范围,您希望减少内存消耗。char[]
。允许B超出范围将允许垃圾收集器回收支持A和B的大char[]
,只留下小char[]
支持B'。答案 1 :(得分:3)
new String(s)可以帮助Garbase收集:
String huge = ...;
String small = s.substring(0,2); //huge.value char[] is not garbage collected here
String gcFriendly = new String(small); //now huge.value char[] can be garbage collected
答案 2 :(得分:0)
以防你需要不相同但相等的字符串。
也许为了确保测试,人们确实str.equals(str2)
代替(str == str2)
。但我从来不需要它。