小编典典

字符串比较结果b / w ==和String#replace用==的差异

java

我对Java中的字符串比较有一点疑问,请考虑以下代码:

if("String".replace('t','T') == "String".replace('t','T')) {
  System.out.println("true");
}
else {
  System.out.println("false");
}

上面的代码始终打印false为,就像我尝试这样:

if("STring" == "STring") {
  System.out.println("true");
}
else {
  System.out.println("false");
}

它会永远打印我true。是的,我知道应该使用String.equals() or equalsIgnoreCase()方法进行字符串比较。但这是面试中提出的问题之一,我很困惑。谁能指导我这种行为?

据我所知,在代码片段1中,"String.replace('t','T')返回对象,因此对象比较返回false。我对吗?


阅读 223

收藏
2020-11-26

共1个答案

小编典典

“ String.replace(’t’,’T’)返回对象,因此对象比较返回false。对吗?

是的,对于这种情况,您是对的。String#replace(或与此相关的String类的任何方法),将返回一个新的String对象(您可以猜测为什么?
Immutability )。因此,您将不得不使用equals方法进行比较,以比较它们的内容。

现在,在第二种情况下:-

"STring" == "STring"

您正在比较两个字符串文字。现在,由于String文字是用Java
嵌入的,所以两个文字都是相同的(从某种意义上说,它们指向相同的内存位置),因此==比较可以得出true

使用==和进行比较的不同之equals处在于,==比较 参考值
-即对象的存储位置值,这对于两种不同的字符串对象将是不同的,就像在第一种情况下一样。而equals比较那些对象中的实际内容。

2020-11-26