La diferencia en el término de la memoria es que las expresiones de la forma: String s = "test"
utilizan la cadena "interna" para compartir instancias únicas.
La invocación de la forma: String s = "test"
es eficiente en comparación con String s = new String("test")
La primera llamada hace uso de la expresión de la constante existente (si hay uno), la segunda llamada crea una nueva instancia sin hacer uso de cualquier instancia existente.
A continuación trozo de código se muestra esto:
String test = new String("test");
String internTest = "test";
String nonInternTest = new String("test");
System.out.println(test == internTest); // prints false
System.out.println(test != nonInternTest); // prints true
System.out.println(test.equals(nonInternTest)); // prints true
También tenga en cuenta que el JLS especifica el comportamiento que ser así:
Cada cadena literal es una referencia a una instancia de la clase String (§4.3.3) Los objetos de cadena tienen un valor constante. Los literales de cadena o, más en general, las cadenas que son los valores de las expresiones constantes se "internan" para compartir instancias únicas, utilizando el método String.intern.
http://stackoverflow.com/questions/390703/what-is-the-purpose-of-the-expression-new-string-in-java –