!flag
не не изменяет значение flag
, оно просто отрицает его, когда оценивает его.
С flag = false
, !flag
идентично !false
, что true
.
Ваш код эквивалентен этому:
if (!false) System.out.println(!false);
, что эквивалентно:
if (true) System.out.println(true);