Особенности класса String
Строки получили специальное значение в Java , потому что они часто
используются в любой программе. Следовательно, эффективность работы с ними (с
точки зрения вычислений и хранения) имеет решающее значение.
Разработчики Java все-таки решили сохранить примитивные типы в объектно-
ориентированном языке, вместо того, чтобы сделать вообще все в виде объектов.
Нужно сказать, что сделано это в первую очередь, для того чтобы повысить
производительность языка. Ведь примитивы хранятся в стеке вызовов, и
следовательно, требуют меньше пространства для хранения, и ими легче управлять.
С другой стороны, объекты хранятся в области памяти, которую используют
79
программы, и которая называется “куча” (heap), а этот механизм требуют сложного
управления памятью и потребляет гораздо больше места для хранения.
По соображениям производительности, класс String в Java разработан, так,
чтобы быть чем-то промежуточным между примитивными типами данных и типами
данных типа класс. Как уже было отмечено выше специальные характеристики типа
String включают в себя:
•
'+' оператор, который выполняет сложение примитивных типов
данных (таких, как int и double), и перегружен, чтобы работать на объектах
String. Операция '+' выполняет конкатенацию двух операндов типа String.
•
Java не поддерживает механизма перегрузки операций по
разработке программного обеспечения. В языке, который поддерживает
перегрузку операций, например C ++, вы можете превратить оператор '+' (с
помощью перегрузки) в оператор для выполнения сложения или вообще
вычитания, например двух матриц, кстати это будет примером плохого кода.
В Java оператор '+' является единственным оператором, который внутренне
перегружен, чтобы поддержать конкатенацию (сложение) строк в Java. Нужно
принять к сведению, что '+' не работает на любых других произвольных
объектах, помимо строк, например, таких как рассмотренные нами ранее
классы Point или Circle.
Теперь, собственно о строках. Существуют несколько способов создания
строк. Строка String может быть получена одним из способов:
•
непосредственно из присвоения строкового литерала ссылке типа
String – таким же способом как примитивные типы данных;
•
или с помощью оператора new и конструктора класса String,
аналогично вызову конструктора любого другого класса. Тем не менее, этот
способ не часто используется и использовать его не рекомендуется.
Для
примера
:
String str1 = "Java is Hot"; //
неявный
вызов
конструктора
через
присваивание
строкового
литерала
String str2 = new String("I'm cool");
//
явный
вызов
конструктора
через
new
80
char[] array = { 'h', 'e', 'l', 'l', 'o', '.' }
;
//
еще
один
способ
создания
строки
В
первом случае str1 объявлена как cсылка типа String и инициализируется
строкой "
Java is Hot
" . Во второй строрке, str2 объявлена как ссылка на строку и
инициализируется с помощью вызова оператора new и конструктора, который
инициализирует ее значением “
I'm cool
” .
•
Строковые литералы хранятся в общем пуле. Это облегчает совместное
использование памяти для строк с тем же содержанием в целях сохранения
памяти. Объекты строк , выделенные с помощью оператора new хранятся в
куче (heap), а там нет разделяемого хранилища для того же самого контента
(содержания).
Достарыңызбен бөлісу: |