Unless you have a unusual, specific need and use case, always use the 2nd version, without the new.
Edited in response to @Ynwa
If you specifically need a String that you know is unique, and you will be comparing with == (which is also unusual), then use the 1st case. For example, it you have some Queue of Strings, and you need a specific String to mean "all done". Now, conceivably, you could use null or some weird String of Armenian characters, but maybe null is legal for your logic, and what if your software eventually gets used in Armenia? The clean way is
public final static String TERMINATOR = new String("Terminator"); // actual text doesn't matter ...
// then, some loop taking from the Queue
while (keepGoing) {
String s = myQueue.take();
if (s == TERMINATOR)
keepGoing = false;
else
// normal processing of s
}
If the client puts "Terminator" on the Queue, it will get processed. So you do not prevent them from using "Terminator". But if the client puts ThatQueueClass.TERMINATOR onto the Queue, it will get shut down.