Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение строк на == в JDK 
:(
    Опции темы
Zefick
  Дата 13.4.2010, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.12.2009

Репутация: 1
Всего: 2



  В классе JComponent в функции setUIProperty сравнение строк осуществляется с помощью оператора ==. Хотелось бы знать, почему так. Разве это работает?
  Я писал тест, который считывает строку из консоли и сравнивал её с тем, что должно быть. Когда сравнение equals давало положительный результат, то == давало ложь. Правда, если я создавал заранее переменную с заданным значением и сравнивал её с такой-же строкой, то == возвращал истину.
PM MAIL   Вверх
dobrolub
Дата 13.4.2010, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



компилятор создаёт единственный объект для каждого стринга значение которого можно вычислить во время компиляции.

То-же самое достигаемо с помощью метода intern() для Стринга.

Пример:

Код

public class T {
  public static void main(String []args) {
    System.out.println(args[0] == args[1]); // false
    System.out.println(args[0].internt() == args[1].intern());// true
  }
}

ожидаемый результат:
Код

java Т yyy yyy
false
true


Это сообщение отредактировал(а) dobrolub - 13.4.2010, 06:28
PM   Вверх
MaxPayneC
Дата 13.4.2010, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 5
Всего: 9



Цитата(dobrolub @  13.4.2010,  06:27 Найти цитируемый пост)
компилятор создаёт единственный объект для каждого стринга

За исключением случаев, когда мы создаем строку вызовом new String("some string"), тогда строковый буфер игнорируется.
PM   Вверх
dobrolub
Дата 13.4.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



А... Я думал в данном случае "some string" будет в пуле констант в классе, а в JVM в специально отведённом для скомпиллированного когда, и всего, что остаётся 'неизменным', участке памяти.(perm gen) , а созданный на его основе String - копия на heap.

Это сообщение отредактировал(а) dobrolub - 13.4.2010, 09:35
PM   Вверх
MaxPayneC
Дата 13.4.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 5
Всего: 9



Оператор new всегда создает новый объект, а создание строки путем String s = "asdf"; сначала поищет в пуле строк, и если найдет, вернет ссылку на существующий объект.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.