powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Интернирование
8 сообщений из 8, страница 1 из 1
Интернирование
    #37653588
Devider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
		String ver = "ver";
		System.out.println( ver == "v" + "er");
		
		InputStreamReader inp = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(inp);
		ver = null;
		try {
			System.out.print("Enter: ");
			ver = br.readLine();
			ver.intern();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println( ver == ("v" + "er").intern());


выдает:
true
Enter: ver
false
Почему в первом случае true а во втором false, хотя в первом явно ничего не интернируется, а во втором - обе строки?
...
Рейтинг: 0 / 0
Интернирование
    #37653602
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
System.out.println( ver == ("v" + "er").intern());

Вот здесь ver не интернирован. Попробуйте вот так:
Код: java
1.
System.out.println( ver.intern() == ("v" + "er").intern());
...
Рейтинг: 0 / 0
Интернирование
    #37653648
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в первом случае true, вероятно, потому что компилятор склеил строку. Какой смысл две константы конкатенировать каждый раз в рантайме?
...
Рейтинг: 0 / 0
Интернирование
    #37653650
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка здесь:
ver.intern();
должно быть
ver = ver.intern();

строки immutable. они своё состояние не меняют.
...
Рейтинг: 0 / 0
Интернирование
    #37653661
Devider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. То есть, константы всегда неявно интернируются, явно интернировать нужно все остальное...
...
Рейтинг: 0 / 0
Интернирование
    #37653668
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeviderСпасибо. То есть, константы всегда неявно интернируются, явно интернировать нужно все остальное...
Не нужно вообще ничего интенрировать, нужно строки сравнивать по equals().
Интернированые строки помещаются в долгоживущий пул. Если вы будете интернировать все динамические строки на сервере, то этот пул может сожрать достаточно много памяти.
А константы в этот пул попападают автоматом.
...
Рейтинг: 0 / 0
Интернирование
    #37653672
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот хороший пост по теме
http://rsdn.ru/forum/java/4526678.aspx
...
Рейтинг: 0 / 0
Интернирование
    #37653711
Devider
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз спасибо.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Интернирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]