因此,我得到了这段代码,并提出了一个问题:编译和执行Test类的结果是什么。
package com.foo.bar;
public class Test {
public static void main(String[] args) {
String str = "java";
StringBuilder sb = new StringBuilder("java");
System.out.println(str.equals(sb) + ":" + sb.equals(str));
}
}
根据它们的结果以及通过Eclipse运行时的程序为
false:false
我不明白为什么会给出上述输出。我认为String类会覆盖.equals,以便将值转换为字符串并进行比较。即:
Object b, Object c ->
b.equals(c) ->
b.toString.equals(c.toString()) //b is a String
它正在运行String.equals()
。如果您有str -> "java"
和sb -> "java"
都覆盖toString。
str.equals(sb) -> str.toString().equals(b.toString) -> true
答案 0 :(得分:2)
否,String.equals
不会将另一个参数转换为String
,然后比较字符。
将此字符串与指定对象进行比较。当且仅当参数不是
true
并且是一个null
对象,并且表示与此对象相同的字符序列时,结果为String
。
如果另一个对象不是String
,例如StringBuilder
,那么它将始终返回false
。它将不将对象转换为String
。
像任何格式正确的equals
方法一样,它将测试给定对象是否是同一类(确保它不是null
首先),如果是,则将其强制转换为{{1 }},但不会调用String
或将给定对象转换为toString
。