Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099

String intern

20.11.2016, 20:38. Показов 656. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Javadoc:
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.
It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.

Почему следующая программа выдает false true?
Java
1
2
3
4
5
6
7
8
9
public class Demo {
    public static void main(String[] args) {
        String str1 = "Apple";
        String str2 = new String("Apple");
        
        System.out.println(str1.intern() == str2);
        System.out.println(str1 == str2.intern());
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2016, 20:38
Ответы с готовыми решениями:

Написать класс, с двумя методами - add(String s), String get() и массивом на 10 элементов
написать класс, с двумя методами - add(String s), String get() и массивом на 10 элементов. Метод add добавляет строку в массив, метод ...

Разделение строки на 2 подстроки с последующей записью последних в HashMap<String, String>
Дорбого времени суток. Застрял на такой глупости блок кода который читает построчно тхт файл и должен разбивать строку и две подстроки...

HashMap с массивом значений (Map<String,List<String>>)
Здравствуйте! Не могу понять, как решить следующую задачу: У меня есть класс City, с полями: город, страна. Public class City{ ...

6
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
22.11.2016, 22:26  [ТС]
Для тех, кому интересен ответ на вопрос.

Строка
Java
1
String str1 = "Apple";
ищет в пуле строк(String pool) строку с таким же содержимым(которые равны при сравнения с помощью equals()). Если есть такая строка, возвращает ссылку на нее, если нет - создает объект в пуле.

Строка
Java
1
String str2 = new String("Apple");
создает новый объект в Heap памяти.

Строка
Java
1
System.out.println(str1.intern() == str2);
str1.intern() по сути ничего не делает, т.к у нас в пуле строк хранится одна строка "Apple", это та, к которой мы применяем метод intern(). То есть возвратиться ссылка этой же строки. Сравниваем со строкой в Heap памяти - получаем false.

Второй случай думаю в дополнительных объяснениях не нуждается.
1
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
22.11.2016, 22:58
Цитата Сообщение от Artmal Посмотреть сообщение
ищет в пуле строк(String pool) строку с таким же содержимым(которые равны при сравнения с помощью equals()).
любые строки, объявленные в коде (литералы в двойных кавычках), попадают в пул строк при запуске jvm, поэтому поиск не происходит - в коде будет зафиксирован адрес строки в пуле.

intern() же наоборот - при вызове происходит поиск строки в пуле с помощи equals() и возврат найденной, если совпадений нет, то строка добавляется в пул и возвращается
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
22.11.2016, 23:20  [ТС]
Цитата Сообщение от LeX BB Посмотреть сообщение
поэтому поиск не происходит
http://stackoverflow.com/a/3052456/6761717
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.11.2016, 08:55
Цитата Сообщение от Artmal Посмотреть сообщение
http://stackoverflow.com/a/3052456/6761717
и в чем противоречие тому что я написал?
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
23.11.2016, 10:12  [ТС]
Java
1
2
String str1 = "abc";
String str2 = "abc"
Вы говорите, что при запуске JVM обе строки попадут в пул, однако, вторая строка не попадет в пул. Вместо этого она будет ссылаться на str1, которая находится в пуле.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
23.11.2016, 10:15
Цитата Сообщение от Artmal Посмотреть сообщение
Вы говорите, что при запуске JVM обе строки попадут в пул, однако, вторая строка не попадет в пул. Вместо этого она будет ссылаться на str1, которая находится в пуле.
абсолютно верно, и это не противоречит написанному мной. обе строки будут интернированы и получат 1 ссылку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2016, 10:15
Помогаю со студенческими работами здесь

ArrayList<HashMap<String,String>> get() - перебирает все элементы
Есть метод getList() который возвращает значение типа ArrayList&lt;HashMap&lt;String,String&gt;&gt; Если я выбираю из этого списка элемент методом...

Как сериализовать/десериализовать Map<String, Set<String>>?
Есть коллекция типа Map&lt;String, Set&lt;String&gt;&gt; - нужно сериализовать и десериализовать ее. Set не сериализуемый интерфейс. Какие есть идеи? ...

Создать словарь (Map<String, String>) занести в него десять записей по принципу «фамилия» - «имя».
/* Удалить людей, имеющих одинаковые имена Создать словарь (Map&lt;String, String&gt;) занести в него десять записей по принципу «фамилия» -...

Реализуйте метод String reverseAndConcaternate(String[] words)
Есть задание. Реализуйте метод String reverseAndConcaternate(String words) который принимает массив слов, переворачивает каждое из них, и...

Разбиение String массива на int и String массивы
так-с. из файла я записал в массив tempmas слова, например &quot;0PlPs1&quot; или &quot;1VKG&quot;. нужно брать слово и разбивать её на 2 строки: 1 строка в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru