Microsoft Word кл программирование на Java 2020 Зорина docx


Строковые литералы и Объекты типа String



Pdf көрінісі
бет40/65
Дата17.10.2023
өлшемі3,23 Mb.
#117230
түріРеферат
1   ...   36   37   38   39   40   41   42   43   ...   65
Строковые литералы и Объекты типа String 
 
Как уже упоминалось, есть два способа создания строк: неявное создание 
путем присвоения строкового литерала переменной или явного создания объекта 
String, через вызов оператора new и вызов конструктора. Например: 
String s1 = "Hello";
// String 
литерал
String s2 = "Hello";
// String 
литерал
String s3 = s1;
// 
одинаковые
ссылки
String s4 = new String("Hello");
// String 
объект
String s5 = new String("Hello");
// String 
объект
Java предоставляет специальный механизм для хранения последовательностей 
символьных литералов (строк), так называемый общий пул строк. Если две 
последовательности литералов (строки) имеют одинаковое содержание, то они 
разделяют общее пространство для хранения внутри общего пула. Такой подход 
принят для того чтобы сохранить место для хранения часто используемых строк. С 
другой стороны, объекты типа String (строки), созданные с помощью оператора new 
и конструктора хранятся в куче.


81 
Каждый объект String в куче имеет свое собственное место для хранения, как 
и любой другой объект. Там нет обмена хранения в куче, даже если два объекта 
Строковые имеют то же содержание. 
А в куче нет разделяемого пространства для хранения двух объектов, даже 
если эти два объекта являются объектами типа String и имеют одинаковое 
содержание. 
Вы можете использовать метод equals() класса String для сравнения 
содержимого двух строк. Вы можете использовать оператор сравнения на равенство 
'==', чтобы сравнить ссылки ( или указатели ) двух объектов. Изучите следующие 
коды: 
s1 == s1;
// true, 
одинаковые
ссылки
s1 == s2;
// true, s1 and s1 
разделяют
общий
пул
s1 == s3;
// true, s3 
получает
то
же
самое
значение
что
ссылка
s1
s1.equals(s3);
// true, 
одинаковое
содержимое
s1 == s4;
// false, 
различные
ссылки
s1.equals(s4);
// true, 
одинаковое
содержимое
s4 == s5;
// false, 
различные
ссылки
в
куче
s4.equals(s5);
// true, 
одинаковое
содержимое
Важные замечания 

В
приведенном выше примере, используется оператор отношения 
для того чтобы проверить на равенство '==' ссылки двух объектов String. Это 
сделано, чтобы показать различия между строковыми последовательностями 
литералов, которые используют совместное пространство для хранения в 


82 
общем пуле строк и объектов String, созданных в куче. 
Это логическая ошибка 
в использовании выражения ( str1 == str2 ) в программе, чтобы сравнить 
содержимое двух объектов типа String. 

Строка может быть создана непосредственно путем присваивания 
последовательности литералов (строки), которая разделяет общий пул строк. 
Не рекомендуется использовать оператор new для создания объектов String в 
куче. 


Достарыңызбен бөлісу:
1   ...   36   37   38   39   40   41   42   43   ...   65




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет