! Флаг имеет два значения в Java? - PullRequest
1 голос
/ 12 июля 2011
boolean flag = false;
if(!flag) System.out.println(!flag); // prints true

Интересно, почему !flag рассматривается как false, когда это условный параметр, переданный if statement и как true в другом месте?

Ответы [ 5 ]

6 голосов
/ 12 июля 2011

Это не так.if (boolean expression) { statement } означает «выполнить statement, если boolean expression истинно».С flag = false, !flag == true.Всегда.

2 голосов
/ 12 июля 2011

!flag не не изменяет значение flag, оно просто отрицает его, когда оценивает его.

С flag = false, !flagидентично !false, что true.
Ваш код эквивалентен этому:

if (!false) System.out.println(!false); 

, что эквивалентно:

if (true) System.out.println(true); 
2 голосов
/ 12 июля 2011

Ну, вы, вероятно, неверно истолковываете оценку условного оператора. Оператор if выполняет операторы внутри, если и только если условие оценивается как true.

Теперь flag равно false. Это означает, что отрицание flag будет true (!false = true). Вот почему выполняется оператор tne внутри оператора if и записывает true (отрицательное значение flag) на вывод консоли.

2 голосов
/ 12 июля 2011

!flag, где flag равно false, равно true во всех контекстах, включая операторы if.

0 голосов
/ 12 июля 2011

на человеческом языке:

если флаг не равен true, выведите противоположное значение "flag"

...