0

在这里,我正在训练我的 OCP 并测试一些字符串行为。

当我得到这个时:

    System.out.println("a".substring(0) == "a".substring(0));  // true

    System.out.println("a".substring(0) == "aa".substring(1)); // false

我产生了一些疑问。我知道该方法返回的是:

    return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);

但是,这个编译器规则有一个概念错误,或者没关系?

4

2 回答 2

2

在第一种情况下substring返回this,并按this == this预期返回 true。
在第二种情况下,substring返回一个新对象,因此==返回 false,因为您正在比较不同的对象。

于 2014-05-07T18:18:30.697 回答
1

您使用了错误的相等运算符。你想要.equals,没有==。您正在使用的方法调用返回的字符串是否是相同的字符串对象是一个实现细节;你想.equals比较它们的内容。

于 2014-05-07T18:16:41.470 回答