> Simple answer: Don't use 'new String("foo")'!
Although 'new String("foo")' is something that it doesn't make sense to do, there are legitimate reasons why you might want to use new String(s) where s is a String. If s was recovered by using the substring() method (or using the regex library) from a much larger String (like a large XML file) then s may be backed by the large char[] array from the original String (so taking up a large amount of memory).
In this instance, new String(s) will not reference the entire character array from the original String. This is a non-obvious source of most Java memory leaks I've come across.
Strings instantiated without the new operator and intrinsically interned while the ones with new operator are not, Try
String a = "test";
String b = "test";
System.out.println(a==b);
and then try
String a = new String("test");
String b = new String("test");
System.out.println(a==b);
Anyway using new for String doesnot make sense anyway.