Что нужно знать об использовании строк в Java
Как только вы начнете изучать Java, класс String привлечет ваше внимание благодаря своим уникальным свойствам.
Вы можете создавать строки и управлять ими на Java легче, чем на других языках. Это потому, что класс String предлагает различные функции.
На основе этих функций существует несколько методов создания и редактирования строк в зависимости от ваших предпочтений и потребностей. Точно так же многое будет зависеть от вашего приложения и от того, где нужно использовать строки.
Чем отличаются строки Java?
Если вы ранее работали с языком C, вы знаете, что строки в C представляют собой массив символов (символов). С другой стороны, строки Java неизменяемы и содержат символы Unicode.
Одна из ключевых функций, делающих строки в Java уникальными, – это конкатенация. Просто используйте оператор сложения «+», чтобы соединить две или более строк. Это то, что вы не можете сделать с другими объектами Java, такими как Point или Circle .
Кроме того, как упоминалось ранее, строки Java неизменяемы, т. Е. Вы не можете их изменять. Например, такие методы, как toUpperCase () и toLowerCase (), генерируют полностью новую строку вместо того, чтобы вносить изменения в существующее содержимое строки. Теперь ваш код вернет эту вновь созданную строку.
Другая область, где строки отличаются, – это использование нулевых символов для завершения строк в таких языках, как C. В Java строки – это объекты, поддерживаемые символьными массивами. Если вы хотите прочитать содержимое своей строки в том виде, в котором его представляют символьные массивы, использование метода toCharArray () выполнит эту работу.
Сравнение строк в Java также удобнее, чем в других языках программирования. Вместо того, чтобы писать длинный блок кода для сравнения строк, вы можете использовать метод equals () для сравнения двух или более строк, используемых в любой программе. В основном это связано с тем, что в Java метод equals переопределяется классом String, что упрощает сравнение строк.
Аналогичным образом, поиск в подстроках в Java также не вызывает проблем. Используя регулярные выражения или методы, такие как lastIndexOf () и indexOf (), вы можете искать сегменты строк и возвращать значения после определения совпадения. Вы также можете использовать регулярные выражения для обрезки и разделения различных строк и использования их по отдельности для самых разных целей в любой программе.
Как строки хранятся в памяти?
Теперь, когда вы знаете, что делает строки в Java разными и полезными, давайте рассмотрим класс String. Если вы кое-что знаете об управлении памятью в Java, значит, вы имели дело с двумя его ключевыми сущностями: кучей и стеком.
Стек используется для выполнения процессов и операций после вызова программой Java, тогда как в куче хранится контент, необходимый для эффективного выполнения и выполнения кода. Итак, какое отношение имеет управление памятью в случае строк?
Это потому, что класс String и строковые литералы в Java обрабатываются по-разному. Это указывает на то, что строковым литералам назначается уникальное пространство хранения в динамической памяти, называемое пулом констант строк. Поэтому всякий раз, когда вы используете строковые литералы для создания строковых объектов в Java, пул констант строк сохраняет их.
Напротив, когда вы используете ключевое слово new для создания строковых объектов, Java будет обрабатывать их так же, как любой другой объект, и отправлять их в кучу для хранения.
Пример строковых литералов
Теперь, когда вы достаточно знаете о строковых объектах, давайте рассмотрим пример строковых литералов:
public class muostrings {
public static void main(String args[])
{
String himuo = "Hello World from MUO";
System. out .println (himuo);
}
}
Здесь строковый литерал создал объект String с содержимым «Hello World from MUO». Java отправит этот объект в пул констант строк.
Использование нового ключевого слова
Вы также можете использовать ключевое слово new для создания объектов String.
Строковый объект строки «himuo» с содержимым «Hello World from MUO» был сгенерирован строковым литералом и будет отправлен в пул констант строк. Точно так же строковые объекты также могут быть созданы с использованием ключевого слова new следующим образом:
public class muostringsobj {
public static void main(String args[]) {
char [] strArr = { 'M', 'O', 'U'};
String jStr = new String(strArr);
System. out .println( jStr );
}
}
В приведенном выше примере ключевое слово new используется для создания строкового объекта. Как объяснялось ранее, они отправляются в кучу, где они хранятся вместе с другими переменными и объектами, ожидающими выполнения программой.
К настоящему времени вам должно быть интересно узнать о пуле констант строк, и это правильно. Он выделяет пространство пула для объектов на основе содержимого строкового объекта. После того, как пул констант String получает объекты, он проверяет их, чтобы убедиться, что два объекта содержат точно такое же содержимое.
Могут ли два строковых объекта хранить одно и то же содержимое?
Когда строковый литерал используется для создания нового объекта, виртуальная машина Java (JVM) просматривает содержимое объекта и оценивает, существует ли он уже в пуле. Когда объект содержит контент, который уже присутствует в пуле, ссылка на объект возвращается без создания нового объекта. Если вы должны создать новый объект, вы должны убедиться, что его содержимое отличное и уникальное.
Однако, если вы используете ключевое слово new для создания новой строки, она будет обрабатываться иначе. Когда вы используете ключевое слово new для создания новой строки, она будет сгенерирована независимо от того, содержит ли она то же содержимое, что и существующая строка.
Это указывает на то, что двум существующим строковым объектам, хранящимся в памяти кучи, разрешено иметь одно и то же содержимое; это отличается от строковых объектов, хранящихся в пуле констант строк. Вы также можете доказать это с помощью оператора «==»; он возвращает истину, если сравниваются два объекта с одинаковым физическим адресом.
public class comparingStrngs {
public static void main(String[] args)
{
String firstLiteral = "muo1";
String secondLiteral = "muo1";
System. out .println(firstLiteral == secondLiteral);
String firstKeyword = new String("muo2");
String secondKeyword = new String("muo2");
System. out .println(firstKeyword == secondKeyword);
}
}
Теперь вы можете легко понимать строки в Java
В этой статье вы узнали, чем отличаются строки в Java, способы использования строк в Java, управление памятью строк в Java и другие важные детали того, как работают строки. Чтобы проверить свое понимание, почему бы не написать программу на Java для объединения двух строк?