Разница в терминах памяти заключается в том, что выражения формы: String s = "test"
использует «интернированную» строку, чтобы обмениваться уникальными экземплярами.
Вызов формы: String s = "test"
эффективен по сравнению с String s = new String("test")
Первый вызов делает использование существующего постоянного выражения (если таковой имеется), второй вызов создает новый экземпляр без использования любой существующий экземпляр.
Ниже фрагменте кода демонстрирует это:
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
отметить также, что JLS определяет поведение будет таким образом:
Каждая строка буквальное представляет собой ссылку на экземпляр класса String (§4.3.3). Объекты String имеют постоянное значение. Строковые литералы, или, в более общем смысле, строки, которые являются значениями константных выражений, «интернированы», чтобы обмениваться уникальными экземплярами, используя метод String.intern.
http://stackoverflow.com/questions/390703/what-is-the-purpose-of-the-expression-new-string-in-java –