Java JLabel和JTextField字符串比较
当我使用JLabel字符串与Java JLabel和JTextField字符串比较,java,string,equals,jlabel,jtextfield,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"); ... Syst
==
进行比较时,效果很好
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(“sometext”)代码>它可以正常工作
那么为什么它与JLabel一起工作,而不是JTextField呢
private JTextField someJTextField = new JTextField("some text");
...
System.out.println (someJTextField.getText() == "some text"); // returns false
编辑:是的,我知道我应该将.equals
与字符串一起使用,我已经读过这篇文章,但我已经知道我将使用“一些文本”,以便它可以引用相同的字符串对象它与JTextField和JLabel无关
JVM在内部使用字符串池,有时==运算符工作,因为不同的字符串(在您的示例中为“某些文本”)指向池中的同一字符串。
看
永远不要将字符串与== JTextField在内部将字符串复制到其可修改的文档对象,以支持编辑,这样您就不会在getText()中返回相同的字符串 将字符串与.equals(objectobj)
=
应该主要用于基本对象。在==运算符和.equals方法中有一点不同。
==运算符比较两个对象,而.equals方法比较两个对象中的值
在您的例子中,您正在比较两个不同的对象,尽管它们可能持有相同的值。在您的情况下,您可以使用.equals方法。这肯定会有帮助 我的意思是,在JLabel setText中,text(t)是这样的;而在JTextField中是这样的。getDocument().insertText(t);所以t没有被保存下来。如果您在jdk源代码中查看这些类中setText()方法的实现,这将变得更加明显。因此,当您创建JTextField(“某些文本”)时,它会将“某些文本”转换为它的内部文档表示形式(可能是字符数组或类似的形式),当您调用someJTextField.getText()时,它会调用新的字符串(char[])构造函数-因此字符串标识与原始的不同(它指向堆中的另一个位置)