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 в
куче.
Достарыңызбен бөлісу: