2013-10-23 11 views
11

In C++ wird dieser Ausdruck kompilieren, und wenn, wird test drucken läuft:Warum kompiliert dieser Boolean in C++ und nicht in Java?

if(!1 >= 0) cout<<"test"; 

aber in Java, wird dies nicht kompilieren:

if(!1 >= 0) System.out.println("test"); 

und stattdessen Klammern benötigt werden:

if(!(1>=0)) System.out.println("test"); 

aber test wird nicht gedruckt, seit 1 >= 0 ist wahr, und NOT wahr ist falsch.

Warum kompiliert und druckt es test in C++, obwohl die Aussage falsch ist, aber nicht in Java?

Danke für Ihre Hilfe.

Antwort

22

Dies geschieht, weil !1 gültig in C++, aber nicht in Java .

Beiden Sprachen analysieren !1>=0 als (!1)>=0 da (in beide C + und Java) ! hat höhere Priorität als >=.

So (in C++), (!1)>=0 ->0>=0 ->true aber (in Java) !1 (!int) ist eine Art Fehler.

Jedoch (in C++ oder Java), !(1>=0) ->!(true) ->false.


Java nur definiert den ! Operator über den boolean Typ.

6

In Java hat der unäre Operator ! eine höhere Priorität als der bedingte Operator >=. Deshalb braucht es Klammern ().

Here ist die Detailtabelle der Operatoren Vorrang von Java.

Aber, in C++ positiven Wert in Bedingung beziehen sich wie boolean true Wert. So ist if(!1>=0) in C++ gültig, aber in Java ungültig. In Java ist boolean Wert nur true und false. Es behandelt niemals positive Werte als wahr.

+6

In C++ hat der Operator '!' Auch eine höhere Priorität als '> ='. – qwertyuiop5040

+3

Nicht nur positive Werte sind wahr, auch negative Werte. Der einzige nicht wahre Wert ist 0. –

Verwandte Themen