gpt4 book ai didi

java - 字符串比较结果 b/w == 和 String#replace with == 的区别

转载 作者:行者123 更新时间:2023-12-02 09:19:59 26 4
gpt4 key购买 nike

Possible Duplicate:
String comparison and String interning in 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。我说得对吗?

最佳答案

"String.replace('t','T') is returning object, so object comparisons returns in false. Am I right?

是的,就本案而言,你是对的。 String#replace (或者 String 类的任何方法),将返回一个新的 String 对象(你能猜到为什么吗?不变性)。因此,您必须使用 equals 方法进行比较,以比较它们的内容。

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

"STring" == "STring"

您正在比较两个字符串文字。现在,从 String literals are interned在 Java 中,因此两个文字是相同的(从某种意义上说,它们指向相同的内存位置),因此 == 比较会给出 true

使用==equals进行比较的区别在于,==比较引用值 -即对象的内存位置的值,对于两个不同的字符串对象来说是不同的,就像在第一种情况下一样。而 equals 比较这些对象中的实际内容。

关于java - 字符串比较结果 b/w == 和 String#replace with == 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14210235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com