Я был ошеломлен, узнав, что сравнение двух логических объектов с == может получить неправильный ответ.Сравнение Java Boolean class
Посмотрите на тестовый код для кода. Тест a и тест c дают согласованные ответы.
Тест b не работает. Кажется, что новый Boolean (true) может создать отдельный объект с тем же значением, вместо того, чтобы возвращать ссылку на Boolean.TRUE;
public static void main(String[] args) {
Boolean a = Boolean.TRUE;
Boolean b = new Boolean(true);
Boolean c = null;
boolean x = true;
boolean y = false;
System.out.println("Test a");
System.out.println((a == Boolean.TRUE) ? "TRUE" : "FALSE");
System.out.println((Boolean.TRUE.equals(a)) ? "TRUE" : "FALSE");
System.out.println("Test b");
System.out.println((b == Boolean.TRUE) ? "TRUE" : "FALSE");
System.out.println((Boolean.TRUE.equals(b)) ? "TRUE" : "FALSE");
System.out.println("Test c");
System.out.println((c == Boolean.TRUE) ? "TRUE" : "FALSE");
System.out.println((Boolean.TRUE.equals(c)) ? "TRUE" : "FALSE");
/* OUTPUT is
Test a
TRUE
TRUE
Test b
FALSE
TRUE
Test c
FALSE
FALSE
*/
}
В чем вопрос? Так работает Java, нравится это или нет. – skaffman
Это правда ... так в чем вопрос? –
Возможно, изучите, почему вы думаете, что вызов конструктора собирается что-то вернуть вам. Вернее, если вы должны написать параметризованный конструктор для 'Boolean', как вы думаете, вы бы его записали, чтобы вернуть' Boolean.TRUE'? –