tags:

views:

134

answers:

3
+2  A: 

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
Thomas Jung
How does that help garbage collection? One would end up with *more* garbage this way.
Paul Ruane
It helps garbage collection if you allow huge and small to go out of scope as gcFriendly does not reference the very large char[] that backs both huge and small.
Adamski
Accepted this and not the more detailed answer simply because of the code sample.
ripper234
+8  A: 

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:

  1. You've created a very large String: A.
  2. 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.
  3. String A has gone out of scope and you wish to reduce memory consumption.
  4. 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 large char[] that backs A and B, leaving only the small char[] backing B'.
Adamski
A: 

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.

Andreas_D