Сравнение строк JLabel и JTextField - PullRequest
2 голосов
/ 07 декабря 2011

Когда я использую сравнение строк JLabel с ==, оно отлично работает

private JLabel someJLabel = new JLabel("some text");
...
System.out.println (someJLabel.getText() == "some text"); // returns true

, но когда я использую JTextField

private JTextField someJTextField = new JTextField("some text");
...
System.out.println (someJTextField.getText() == "some text"); // returns false

, я знаю, что если бы я использовал someJTextField.getText().equals("some text");, это сработало быхорошо.

Так почему он работает с JLabel, а не с JTextField

РЕДАКТИРОВАТЬ: да, я знаю, что я должен использовать .equals со строкой, я читал эту статью http://javatechniques.com/blog/string-equality-and-interning/, ноуже известно, что я буду использовать «некоторый текст», чтобы он мог ссылаться на тот же строковый объект

Ответы [ 4 ]

3 голосов
/ 07 декабря 2011

Это не относится к JTextField и JLabel.

JVM использует внутренний пул строк, и иногда оператор == работает, потому что разные строки (в вашем случае «некоторый текст») указывают на одну и ту же строку в пуле. Посмотрите на вопрос здесь

Никогда не сравнивайте строки с == !!!

1 голос
/ 07 декабря 2011

JTextField внутренне копирует строку в свой изменяемый объект документа, чтобы поддержать редактирование, чтобы вы не возвращали ту же строку в getText ().

0 голосов
/ 18 марта 2015

Существует небольшая разница в операторе == и методе .equals.Оператор == сравнивает два объекта, а метод .equals сравнивает значения в двух объектах.

В вашем случае вы сравниваете два разных объекта, хотя оба могут содержать одинаковые значения.В вашем случае вы можете использовать метод .equals. Это, безусловно, поможет!

0 голосов
/ 07 декабря 2011

Сравнить строки с .equals(Object obj)

== в основном следует использовать только с примитивными объектами.

...