В чем разница между созданием String как new() и literal?
Оба выражения дают объект String, но между ними существует тонкая разница. Когда вы используете новую строку («Hello World !!»); , он явно создает новый и ссылочно отдельный экземпляр объекта String. Это отдельный экземпляр класса Java.lang.String. String s = "Hello World !!"; может повторно использовать экземпляр из пула строковых констант, если он доступен (String Pool - это пул строк, хранящихся в памяти кучи Java).
В этом примере оба строковых литерала ссылаются на один и тот же объект:
String str1 = "Hello World!!"; String str2 = "Hello World!!"; System.out.println(str1 == str2); // правда
В следующем коде создаются 2 разных объекта, и они имеют разные ссылки:
String str3 = new String("Hello World!!"); String str4 = new String("Hello World!!"); System.out.println(str3 == str4); // ложный
С точки зрения хорошей практики кодирования: не используйте == для проверки равенства строк, вместо этого используйте .equals().
В общем, вы должны использовать текстовую литературу, когда это возможно. Его легче читать, и он дает компилятору возможность оптимизировать ваш код.
Класс строки Java
Класс Java String представляет символьные строки. Класс Java.lang.String предоставляет множество методов для работы с строкой. Java String не является примитивным типом данных, например int и long. Это в основном объект, который представляет последовательность значений char. Это похоже на массив символов, который работает так же, как строка Java.
Источник: http://net-informations.com/Java/cJava/literal.htm