当我使用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/但已经知道我将使用“一些文本”所以它可以引用相同的字符串对象
答案 0 :(得分:3)
它与JTextField和JLabel无关。
JVM在内部使用字符串池,有时候==运算符可以正常工作,因为不同的字符串(在您的情况下为“some text”)指向池中的相同字符串。 看question here
永远不要将字符串与== !!!
进行比较答案 1 :(得分:1)
JTextField在内部将字符串复制到其可修改的文档对象以支持编辑,因此您不会在getText()中返回相同的字符串。
答案 2 :(得分:0)
将字符串与.equals(Object obj)
==
应该主要用于原始对象。
答案 3 :(得分:0)
==运算符和.equals方法有点不同。 ==运算符比较两个对象,而.equals方法比较两个对象中的值。
在您的情况下,您正在比较两个不同的对象,尽管两者可能保持相同的值。在你的情况下,你可以使用.equals方法。这肯定会有所帮助!