Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLabel和JTextField字符串比较_Java_String_Equals_Jlabel_Jtextfield - Fatal编程技术网

Java JLabel和JTextField字符串比较

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

当我使用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(“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[])构造函数-因此字符串标识与原始的不同(它指向堆中的另一个位置)