Java 使用substring()的字符串似乎不相等

Java 使用substring()的字符串似乎不相等,java,substring,equivalence,Java,Substring,Equivalence,可能重复: 我是java新手,所以不要期望事情变得容易,但这让我完全震惊。 究竟为什么if语句不能正确评估: import javax.swing.JFrame; import javax.swing.JTextArea; public class StringMystery extends JFrame { JTextArea txt = new JTextArea(); String string1 = "abcde"; String string2 = str

可能重复:

我是java新手,所以不要期望事情变得容易,但这让我完全震惊。 究竟为什么if语句不能正确评估:

import javax.swing.JFrame;
import javax.swing.JTextArea;

public class StringMystery extends JFrame {

    JTextArea txt = new JTextArea();
    String string1 = "abcde";
    String string2 = string1.substring(0,4);

    public StringMystery() {

        setLayout(null);

        txt.setBounds(20, 20, 100, 100);
        add(txt);

        txt.setText(string2);

        //string 2 is definitely equal to "abcd" but this doesn't evaluate:
        if (string2 == "abcd"){     
            txt.setText("string2 = abcd");          
        }

    }


    public static void main(String[] args) {

        StringMystery jtxt = new StringMystery();
        jtxt.setSize(200,200);
        jtxt.setTitle("String Mystery");

        jtxt.setVisible(true);

    }
}

=
通过引用而不是值来比较对象

您有两个包含相同值的不同字符串对象,因此
=
返回false


您需要调用
.equals()

=
通过引用而不是通过值来比较对象

您有两个包含相同值的不同字符串对象,因此
=
返回false

您需要调用
.equals()

除非您想比较实际引用,否则不要(永远)使用
=
进行比较。您需要使用
.equals()
方法。对于 String ,您可以考虑编写<代码>“ABCD”。(MySTR)——因为MySTR可能是“代码> null 请注意,在Java中,字符串是和
=
有时可能会给出正确的结果,但决不能依赖于此

除非您想比较实际参考,否则不要(曾经)使用
=
进行比较。您需要使用
.equals()
方法。对于 String ,您可以考虑编写<代码>“ABCD”。(MySTR)——因为MySTR可能是“代码> null
请注意,在Java中,字符串是和
=
有时可能会给出正确的结果,但决不能依赖于此

惊人的快速反应。谢谢所有OOPS语言都是这样的吗?为什么他们不能让它工作= = @ GimLI:No C++和C++支持操作符重载,JavaScript处理字符串特别快。谢谢所有OOPS语言都是这样的吗?为什么他们不能让它工作= = @ GimLi:不,C++和C++支持操作符重载,JavaScript处理字符串。对于我这样的新手来说,找到这个线程的语法是Srime2..Abdies(“ABCD”),对于像我这样的新手,发现这个线程的语法是StRIG2..Erras(ABCD)。其他百万字符串的副本==问题其他百万字符串的副本==问题