В чем разница между созданием 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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector