Boolean.TRUE == myBoolean против Boolean.TRUE.equals(myBoolean)

Есть ли когда-нибудь ситуация, когда использование equals(Boolean) а также == будет иметь разные результаты при работе с Boolean объекты?

Boolean.TRUE == myBoolean;

Boolean.TRUE.equals(myBoolean);

Я не думаю о примитивных типах здесь, просто булевых объектах.

4 ответа

Решение

Как насчет:

System.out.println(new Boolean(true) == new Boolean(true));
System.out.println(new Boolean(true) == Boolean.TRUE);

(оба печатают false по той же причине, что и любой другой тип объектов).

Было бы опасно использовать == так как myBoolean возможно, не произошел от одной из констант, но был построен как new Boolean(boolValue), в таком случае == всегда приведет к false, Вы можете использовать только

myBoolean.booleanValue()

ни с одним == ни equals участвует, давая надежные результаты. Если вы должны обслуживать null-значит так же, тогда нет ничего лучше твоего equals подход.

     if(Boolean.TRUE == new Boolean(true)){
            System.out.println("==");
        }

        if(Boolean.TRUE.equals(myBoolean)){
            System.out.println("equals");;
        }

В этом случае первый ложный. Только второе, если условие верно. Печать:

equals

== работает только для примитивных типов
когда вы сравниваете объекты, вы всегда должны использовать o.equls(Object ob)

Другие вопросы по тегам