在这里,我正在训练我的OCP并测试一些String行为。
当我得到这个时:
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);
但是,这个编译器规则存在概念错误,还是一切都好?
答案 0 :(得分:2)
在第一种情况下substring
返回this
,this == this
按预期返回true。
在第二种情况下,substring
返回一个新对象,因此==
返回false,因为您正在比较不同的对象。
答案 1 :(得分:1)
您正在使用错误的相等运算符。您想要.equals
,而不是==
。方法调用返回的字符串是否与使用相同的字符串对象是实现细节;你希望.equals
比较他们的内容。