2013-09-24 3 views
1

Я был белым ящиком, проверяющим некоторые исключения, я наткнулся на какое-то запутанное поведение, разместив образец тестового кода и вывод!Java Confusing behavior

// Use Case #01 
String a = null; 
System.out.println(" Use Case #01"); 
System.out.println(" Garbage Testing : "+ a == null); 


//Use Case #02 
a = null; 
System.out.println(" Use Case #02"); 
System.out.println(" Garbage Testing : " + a != null); 

Выход

Use Case # 01

ложные

Use Case # 02

правда

Почему это == null false, хотя a = null?

ответ

8
System.out.println(" Garbage Testing : "+ a == null); 

Он печатает ложные и причина - это на самом деле сравнение "Garbage Testing : null"==null, результатом которого является это false, как + оказывает более высокий приоритет.

правильное группирование бы решить эту проблему -

System.out.println(" Garbage Testing : "+ (a == null)); 

Печать - Тестирование Garbage: истинный

System.out.println(" Garbage Testing : "+ (a != null)); 

печать - Тестирование Garbage: ложные

+0

Точно. '+' имеют высокий приоритет. –

+1

Umm Thats right and thanks for comment @suresh –

5

Используйте кронштейны для правильного поведения:

System.out.println(" Garbage Testing : " + (a == null)); 
//=> Garbage Testing : true 

Из-за operators precedence где + выше, чем ==, ваше выражение оценивается как:

System.out.println((" Garbage Testing : " + a) == null); 

и что ложно

PS: Также обратите внимание, что в вашем заявлении вы даже не печатаете Garbage Testing :.

+0

спасибо, В чем причина этого, хотя я знаю решение! –

+0

Предусмотрена также причина. – anubhava

2

оператор '+' имеет приоритет над «= знак равно Фактически, вы сравниваете строку «Мусорное тестирование: null» с нулевым значением. Чтобы достичь ожидаемых результатов, вам нужно разместить круглые скобки вокруг «a == null».

0

Сначала он суммирует, а затем проверяет на равенство. Результат суммы не равен нулю.

1

Как вы не заключаете

a == null 

в скобках, как

(a == null) 

поэтому левая сторона условия в тесте на самом деле:

" Garbage Testing : "+ a 

который определенно не нулевой ,

Не будет путаницы, если вы проверите, используя скобки, как указано выше.

0

Еще раз .. моя команда отведениях был впереди :) мне в получении причина ... на самом деле

От Ahsan Бахи Причина в том, что

[ «Garbage Тестирование:» + а]

сцепляет "Мусор Тестирование:" с значение, которое (NULL) поэтому окончательная строка

[ "Испытание мусора: нулевая"]

и его Comparision с нулевым является ложным

+1 Ahsan Бахов

+ 1 Subhrajyoti Majumder, anubhava, Juned Ahsan, Hollis Waite Для ваших усилий, спасибо