В одной из лекций по строкам, было написано, что если содержание строк одинаковое, то у них одинаковые ссылки
т.е.
String s1 = "привет"
String s2 = "привет"
в s1 и s2 будут храниться одинаковые ссылки, почему тогда у элементов массива strings[0] и strings[1] разные ссылки
V1zzy
34 уровень
Почему нельзя сравнивать ссылки?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сирёга
14 сентября 2023, 22:07
Где-то что-то вы недопоняли...
В любом случае, если мы пишем:
String s1 = "ffggg";
String s2 = "ffggg";
мы создаем два разных объекта класса String. А у двух разных объектов не может быть одного и того же адреса. В этой задаче мы считываем сканером вводимые значения, при этом создаются разные объекты, не смотря на то, что текст одинаковый.
Вот если написать:
s2 = s1 - тогда переменные ссылаются на один объект, адрес один и тот же.
Можно привести две одинаковые строки к единому адресу, но для этого их нужно при помощи метода intern закинуть в String Pool.
https://javarush.com/groups/posts/645-stroki-v-java
0
V1zzy
15 сентября 2023, 13:47
https://javarush.com/groups/posts/equals-java-sravnenie-strok
в этой статье написано если создать 2 разных строки (без ключевого слова new) с одинаковым содержанием то ссылки будут одинаковые
![]()

0
Sbeu_Chmonya QA Automation Engineer
14 сентября 2023, 21:21полезный
Смею предположить, что дело в том, что String неизменяемый тип данных, а массивы изменяемый.
В следствии чего, дабы мы, меняя строки в массиве, не меняли изначальную строку String s1, при "добавлении" ее - строки в массив на самом-то деле кладется ее - строки копия, которая под капотом создается иначе, чем у нас, из-за чего имеет другой адрес в памяти.
От этого в strings[0] и в strings[1] будут добавляться копии с разными адресами в памяти, но одинаковым содержимым.
Может быть так:
Насколько мне известно, если таким образом создать две одинаковые строки, то их ссылки никогда не будут равны.
Из разряда
System.out.println(s1 == s2); возвращает true только потому, что у нас есть пул констант String, который проверяет такие строки повторно использует эти же строки. Массивы никогда не были предназначены для этого.
Собственно:
даст false для System.out.println(s1 == s2);.
+1