Итак, мне дали этот фрагмент кода и задали вопрос: каков будет результат компиляции и выполнения класса 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