Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Сравнение строк на == в JDK |
Автор: Zefick 13.4.2010, 06:18 |
В классе JComponent в функции setUIProperty сравнение строк осуществляется с помощью оператора ==. Хотелось бы знать, почему так. Разве это работает? Я писал тест, который считывает строку из консоли и сравнивал её с тем, что должно быть. Когда сравнение equals давало положительный результат, то == давало ложь. Правда, если я создавал заранее переменную с заданным значением и сравнивал её с такой-же строкой, то == возвращал истину. |
Автор: dobrolub 13.4.2010, 06:27 | ||||
компилятор создаёт единственный объект для каждого стринга значение которого можно вычислить во время компиляции. То-же самое достигаемо с помощью метода intern() для Стринга. Пример:
ожидаемый результат:
|
Автор: MaxPayneC 13.4.2010, 08:29 |
За исключением случаев, когда мы создаем строку вызовом new String("some string"), тогда строковый буфер игнорируется. |
Автор: dobrolub 13.4.2010, 09:33 |
А... Я думал в данном случае "some string" будет в пуле констант в классе, а в JVM в специально отведённом для скомпиллированного когда, и всего, что остаётся 'неизменным', участке памяти.(perm gen) , а созданный на его основе String - копия на heap. |
Автор: MaxPayneC 13.4.2010, 09:58 |
Оператор new всегда создает новый объект, а создание строки путем String s = "asdf"; сначала поищет в пуле строк, и если найдет, вернет ссылку на существующий объект. |