JLabel和JTextField字符串比较

时间:2011-12-07 16:22:41

标签: java string equals jlabel jtextfield

当我使用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 个答案:

答案 0 :(得分:3)

它与JTextField和JLabel无关。

JVM在内部使用字符串池,有时候==运算符可以正常工作,因为不同的字符串(在您的情况下为“some text”)指向池中的相同字符串。 看question here

永远不要将字符串与== !!!

进行比较

答案 1 :(得分:1)

JTextField在内部将字符串复制到其可修改的文档对象以支持编辑,因此您不会在getText()中返回相同的字符串。

答案 2 :(得分:0)

将字符串与.equals(Object obj)

进行比较

==应该主要用于原始对象。

答案 3 :(得分:0)

==运算符和.equals方法有点不同。 ==运算符比较两个对象,而.equals方法比较两个对象中的值。

在您的情况下,您正在比较两个不同的对象,尽管两者可能保持相同的值。在你的情况下,你可以使用.equals方法。这肯定会有所帮助!