Java中的String和StringBuilder之间的.equals方法

12
class returntest
{



public static void main(String...args)
{

String name1 = "Test";
String s = new String("Test");
StringBuilder sb = new StringBuilder("Test");

System.out.println(name1.equals(sb)); //Line 1
System.out.println(name1.equals(s));  //Line 2
System.out.println(s.equals(sb));     // Line 3
System.out.println(s.equals(name1));  //Line 4
}

}
以下是输出结果。
false
true
false
true

第一行返回并且第三行返回 false。

我不明白为什么编译器不认为"name1"和"sb"包含相同的值。

同样,编译器不认为"s"和"sb"包含相同的字符串(两者都是非原始类型)。

有人能解释一下第一行和第三行的输出吗?


另外,第2行的name1.equals(s)和第4行的s.equals(name1)进行了相同的比较。 - Upulie Han
12个回答

0
一个简单的答案是,你不能拿苹果和橙子来比较。我们作为人类知道它们是不同的,编译器是一个程序,不能像人类智能一样行动。
这就是为什么你不能说两个对象之一是汽车,另一个是相同汽车的分解零件。尽管两者具有相同的配置 :)
StringBuilder和String是完全不同的对象。

0

StringBuilder没有覆盖equals方法。它从Object类继承了equal方法。除非你比较的引用指向同一个对象,否则它将返回false。

String覆盖了equals方法,因此如果它们在含义上等价,则对象将返回true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接