Вы можете справиться со строками JAVA, если знаете это.

String — одна из тем, вызывающих затруднения. Это похоже на прогулку в «Bhool Bulaiya». Но когда вы посещаете «Bool Bhulaiya» с гидом, пути кажутся простыми, чтобы добраться до нужного пункта назначения, и это то, что мы попытались сделать в следующей статье, чтобы упростить путь к пониманию String.

Чтобы лучше понять, важно знать «Как», а не «Что». Итак, давайте начнем с рождения строки в утробе памяти.

РАСПРЕДЕЛЕНИЕ ПАМЯТИ STRING:

Строки можно определить следующим образом:
1: строка x = «Привет»;
2: строка y = новая строка («HowRU»);

Давайте посмотрим на распределение памяти в обоих случаях:

‹‹- на диаграмме x – это переменная типа String, указывающая на адрес, скажем, f0f0.
А адрес f0f0 равен адрес памяти в пуле строк, который теперь содержит литерал «Hello».

Для String y =new String ("HowRU");
Как только определено ключевое слово "new", в динамической памяти создается объект с адресом say a0a0.
Этот объект содержит адрес литерала «HowRU», который фактически сохраняется в пуле строк. Допустим, «HowRU» сохраняется по адресу f0f1 в пуле строк. (Как показано на рисунке).

Здесь следует помнить следующее:
1. Строковые литералы всегда сохраняются в специальной памяти, называемой
пулом строк.
2. «y» указывает на объект с адресом a0a0
-›и a0a0 указывает на адрес в пуле строк (f0f1 )
-›и f0f1 содержит литерал «HowRU»
.

Теперь, когда понятно, как строки размещаются в памяти в зависимости от того, как они определены, мы можем перейти к самой интересной вещи о строках, НЕИЗМЕНИМОСТИ СТРООК.

В Java строки являются неизменяемыми, т. е. однажды созданные, их нельзя изменить, но каждый раз при обновлении string_literal создается новый литерал.

Давайте разберемся на следующем примере.

class StringTest {
    public static void main (String[] args)
    {
        String s1 = "HELLO";     //Step1
        s1.toLowerCase();        //Step2
        System.out.println(s1);  //Step3
    }
}

На шаге 1 s1 назначается String_literal "HELLO", который создается в Пул строк по адресу f0f0.
На шаге 2
s1 преобразуется в нижний регистр.

Но, как мы сказали выше, строка является неизменной,после создания ее нельзя изменить, но каждый раз, когда выполняется обновление строки_литерала, создается новый литерал.
Таким образом, новая строка (привет) создается в пуле строк с адресом f0f1(который не назначен ни одной переменной)и s1 по-прежнему указывает на HELLO.
Поэтому шаг 3 будет печатать HELLO, а не hello.

Обратите внимание, что на шаге 2 слово "HELLO" не заменяется словом "hello". Но новая строка создается по новому адресу (f0f1) в пуле строк.

Это было базовое, но важное понимание того, как именно работают строки.
Поняв это, вы готовы взяться за более сложный пример (Link), который перевернет тему строк из замешательства. веселиться.