Possible Duplicate:
What is the purpose of the expression “new St开发者_如何转开发ring(…)” in Java?
It's immutable, why would you need to invoke String.String(String str)
?
From the API doc:
Unless an explicit copy of original is needed, use of this constructor is
unnecessary since Strings are immutable.
The only reason I can think of is in the situation where:
- You've created a very large
String
: A. - You've created a small substring: B based on A. If you look at the implementation of
substring
you'll see it references the same char[] array as the original string. String
A has gone out of scope and you wish to reduce memory consumption.- Creating an explicit copy of B will mean that the copy: B' no longer references the large
char[]
. Allowing B to go out of scope will allow the garbage collector to reclaim the largechar[]
that backs A and B, leaving only the smallchar[]
backing B'.
new String(s) can help garbase collection:
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
Just in case you need String that are not the same but equal.
Maybe for testing to make sure, people really do str.equals(str2)
instead of (str == str2)
. But I never needed it.
精彩评论