Почему этот логический компилировать в С++, а не в Java?
В С++ это выражение будет скомпилировано, а при запуске будет напечатано test
:
if(!1 >= 0) cout<<"test";
но в Java это не будет компилироваться:
if(!1 >= 0) System.out.println("test");
и вместо этого нужны скобки:
if(!(1>=0)) System.out.println("test");
но test
не будет печатать, так как 1 >= 0
- true, а NOT
true - false.
Итак, зачем он компилирует AND распечатывает test
в С++, хотя утверждение является ложным, но не в Java?
Спасибо за вашу помощь.
Ответы
Ответ 1
Это происходит потому, что !1
действителен в С++, но не в Java 1.
Оба языка анализируют !1>=0
как (!1)>=0
, потому что (как в C +, так и в Java) !
имеет более высокий приоритет, чем >=
.
Итак (в С++), (!1)>=0
→ 0>=0
→ true
, но (в Java) !1
(!int
) - ошибка типа.
Однако (в С++ или Java), !(1>=0)
→ !(true)
→ false
.
1 Java определяет только оператор !
по типу boolean
.
Ответ 2
В java унарный оператор !
имеет высокий приоритет, чем условный оператор >=
. Для этого ему нужна скобка ()
.
Здесь - таблица сведений о приоритете операторов Java.
Но в С++ положительное значение в состоянии относится к значению boolean true
. Таким образом, if(!1>=0)
действителен в С++, но недействителен в Java. В Java значение boolean
- это только true
и false
. Он никогда не считает положительное значение истинным.