Как String устроен внутри?

134
16 декабря 2020, 18:50

Пример:

String s = "cat";
s = s + "-" + s;

В примере который показывает как это работает "под капотом", я увидел следующее:

String s = "cat";
StringBuilder s2 = new StringBuilder(s);
s2.append("-");
s2.append(s);
s = s2.toString();

У меня несколько вопросов:
1. Пример который показывает как это работает под капотом, это правильный пример?
2. Как мне допустим самому посмотреть как работает это всё под капотом, просто этот пример получил на учебе

Answer 1

Самый простой способ это сделать тестовый класс и запустить всё это в дебаггере. Здесь Прям очень всё подробно расписано. Вот здесь расписано про саму строку, а именно, что она неизменна. Следовательно, если вы что-то хотите к ней присоединить, то у вас создастся новый объект с новым значением, а не просто присоединится что-то.

То, что у вас выполнено тут

String s = "cat";
StringBuilder s2 = new StringBuilder(s);
s2.append("-");
s2.append(s);
s = s2.toString();

предподчтительней к использованию. У вас все объединения будут выполнены через StringBuilder ,а в s запишется новое значение, которое будет указывать на другую ячейку памяти, аналогично и вашему изначальному примеру.

READ ALSO
android тени для customview невыпуклой формы

android тени для customview невыпуклой формы

Я определяю форму для тени моего customview следующим способом:

104
Парсинг Json объекта Java (Spring boot, Rest)

Парсинг Json объекта Java (Spring boot, Rest)

При создании нового product'а мне понадобилось получить его название, но, при использовании метода getName(), я получаю например: Product@11123

126
Java Client-Server [закрыт]

Java Client-Server [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

139
Очистить массив ArrayList<ArrayList<String[]>> из памяти

Очистить массив ArrayList<ArrayList<String[]>> из памяти

Подскажите пожалуйста, правильно ли я очищаю глобальные массивы из памяти, и надо ли это вообще делать?

112