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


String является неизменяемым



Pdf көрінісі
бет41/65
Дата17.10.2023
өлшемі3,23 Mb.
#117230
түріРеферат
1   ...   37   38   39   40   41   42   43   44   ...   65
Байланысты:
Лекции

String является неизменяемым 
С тех самых пор, когда в языке Java появились возможности по 
использованию разделяемого пространства для хранения строк с одинаковым 
содержанием в виде строкового пула, String в Java стали неизменяемыми. То есть, 
как только строка создается (как объект в памяти программы), ее содержание не 
может быть изменено никаким образом (по аналогии с Си – строковые литералы — 
это символьные константы). В противном случае, если этого не сделать, другие 
ссылки String разделяющие ту же самую ячейку памяти будут зависеть от 
изменений, которые могут быть непредсказуемыми и, следовательно, является 
нежелательными.
Такой метод, как например, toUpperCase () казалось-бы может изменить 
содержимое объекта String.
Хотя на самом деле, создается совершенно новый объект String и 
возвращается как раз он в точку вызова. Исходный объект-строка будет 
впоследствии удален сборщиком мусора (Garbage-collected), как только не окажется 
больше ссылок, которые ссылаются на него. 
Вот поэтому-то объект типа String и считается неизменяемым объектом, 
вследствие этого, считается не эффективным использовать тип String, например, в 
том случае, если вам нужно часто модифицировать строку (так вы в таком случае 
будете создавать много новых объектов типа String, которые каждый раз будут 
занимать новые места для хранения). Например, 
// 
неэффективный
код


83 
String str = "Hello"; 
for (int i = 1; i < 1000; ++i) { 
str = str + i; 

Классы StringBuffer и StringBuilder 
 
Как объяснялось выше, строки String являются неизменяемыми, поэтому 
строковые литералы с таким контентом хранятся в пуле строк. Изменение 
содержимого одной строки непосредственно может вызвать нежелательные 
побочные эффекты и может повлиять на другие строки, использующие ту же 
память. 
JDK предоставляет два класса для поддержки возможностей по изменению 
строк: это классы StringBuffer и StringBuilder (входят в основной пакет java.lang ).
Объекты StringBuffer или StringBuilder так же, как и любые другие обычные 
объекты, которые хранятся в куче, а не совместно в общем пуле, и, следовательно, 
могут быть изменены , не вызывая нехороших побочных эффектов на другие 
объекты . 
Класс StringBuilder как класс был введён в JDK 1.5. Это то же самое , как 
использование класса StringBuffer, за исключением того, что StringBuilder не 
синхронизирован по многопоточных операций. Тем не менее, для программы в виде 
одного потока или нити управления, использование класса StringBuilder, без 
накладных расходов на синхронизацию, является более эффективным. 



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




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

    Басты бет