【问题标题】:strings seemingly not equivalent using substring() [duplicate]使用 substring() 似乎不等价的字符串 [重复]
【发布时间】:2012-05-02 01:01:57
【问题描述】:

可能重复:
Java String.equals versus ==

我是 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);

    }
}

【问题讨论】:

  • 其他百万字符串的重复 == 问题

标签: java substring equivalence


【解决方案1】:

请勿(永远)使用== 进行比较,除非您想比较实际参考。您需要使用.equals() 方法。对于String,您可以考虑编写"abcd".equals(myStr) - 因为myStr 可能是null

请注意,Java 中的字符串是 interned== 有时可能会给出正确的结果,但绝不应该依赖它。

【讨论】:

  • 惊人的快速响应。谢谢。所有oop的语言都是这样的吗?为什么他们不能让它与 == 一起工作
  • @Gimli:没有。C# 和 C++ 支持运算符重载,Javascript 对字符串有特殊处理。
【解决方案2】:

== 按引用而不是按值比较对象。

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

您需要致电.equals()

【讨论】:

  • 对于像我这样找到这个线程的新手来说,语法是 string2.equals("abcd")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多