2015-08-04 3 views
2

Boolean объект в JAVA может иметь 3 значения True, False, NULLJava обработка булевых и NULL

public class First { 

    public static void main(String args[]) 
    { 
     System.out.println("equals(new Boolean(\"True\"),True) :: " + isEqual(new Boolean("True"), true)); 
     System.out.println("equals(new Boolean(\"False\"), new Boolean(null)) :: " + isEqual(new Boolean("False"), new Boolean(null))); 
     System.out.println("equals(new Boolean(\"False\"), null)) :: " + isEqual(new Boolean("False"), null)); 
    } 

    static boolean isEqual(Boolean a, Boolean b) 
    { 
     return a.equals(b); 
    } 
} 

Выход для выше кода

equals(new Boolean("True"),True) :: true 
equals(new Boolean("False"), new Boolean(null)) :: true 
equals(new Boolean("False"), null)) :: false 

Пожалуйста, объясните, почему Случай 2 возвращает истину но Case 3 возвращает false

+0

Очевидно, что значение null не может быть равно действительной, не нулевой ссылке. – duffymo

+0

Как может быть «null» равно любому другому значению? а во втором вы создаете объект 'new Boolean (null)' –

+1

new Boolean (null) означает, что объект Boolean создан и его значение равно false. – kswaughs

ответ

6

Это потому, что конструктор для Boolean, если это предусмотрено с null выделит булеву объект, представляющий значение false

Читать здесь: http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html

общественное Boolean (String s)

Выделение булева объекта, представляющего значение tru e, если аргумент строки не равен нулю и равен, игнорируя регистр, строке "true". В противном случае выделите объект Boolean, представляющий значение false. Примеры: новый Boolean («True») создает объект Boolean, который представляет true. new Boolean («yes») создает объект Boolean, который представляет false. Параметры: s - строка, которая должна быть преобразована в Булева.

1

Если вы посмотрите на исходный код Boolean класс, вы можете передать это null возвращает значение false:

private static boolean toBoolean(String name) { 
    return ((name != null) && name.equalsIgnoreCase("true")); 
} 
+0

Я не знаю, какую версию вы использовали, но в 1.8 существует 'public static boolean parseBoolean (String s) { return ((s! = Null) && s.equalsIgnoreCase (" true ")); } ' – Adam

Смежные вопросы