2017-02-21 109 views
0

Я просто написал код:JAVA Логическое конструктор дает неожиданный результат

Boolean b1 = new Boolean("programmer"); 
Boolean b2 = new Boolean("tester"); 
System.out.println(b1.equals(b2)); 

Он печатает true в выводе. Почему?

Согласно JAVA документации

new Boolean(String): Выделяет объект, представляющий логическое значение истина, если строка аргумент не является нулевым, и равно, игнорируя случай, в строке «истина».

+1

Оба булевых объекта являются ложными, поэтому они равны, и ваша проверка равен будет распечатывать true. Здесь нет ничего неожиданного. –

+1

Прочтите последнее предложение очень внимательно. Это дает вам основание. – Guy

+1

Потому что «Выделяет логический объект, представляющий значение true, если строковый аргумент не равен нулю и равен, игнорируя регистр, строке« true ». Все остальное ложно. –

ответ

5
Boolean b1 = new Boolean("programmer"); // false 
Boolean b2 = new Boolean("tester"); // false 

Так тестирование false == false является true.


От public Boolean(String s) constructor signature:

  • Boolean.parseBoolean("True") возвращается true

  • Boolean.parseBoolean("yes") возвращает false

3

Оба ваши b1 и b2 являются Boolean.FALSE, поэтому они равны.

Только если строка "true" (игнорирует регистр) будет new Boolean(String) be TRUE.

Вот конструктор Boolean:

public Boolean(String s) { 
     this(parseBoolean(s)); 
    } 

И метод parseBoolean:

public static boolean parseBoolean(String s) { 
    return ((s != null) && s.equalsIgnoreCase("true")); 
} 
1

По умолчанию значения булевой лжи .. и в вашем случае

Boolean b1 = new Boolean("programmer"); // false 
System.out.println(b1); 
Boolean b2 = new Boolean("tester"); // false 
System.out.println(b2); 

Так false == false всегда возвращает true

В дополнении к этому, если вы хотите сравнить строки, которые имеют данный, то вы должны использовать String класс обертки.