2013-10-23 14 views
11

In C++, questa espressione sarà la compilazione, e quando correva, stamperà test:Perché questo booleano si compila in C++ e non in Java?

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

ma in Java, questo non verrà compilato: sono necessari

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

e invece parentesi:

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

ma test non viene stampato poiché 1 >= 0 è vero e NOT true è falso.

Quindi perché compila E stampa test in C++, anche se l'istruzione è falsa, ma non in Java?

Grazie per il vostro aiuto.

risposta

22

Ciò si verifica perché !1 è valido in C++ ma non in Java .

Entrambi i linguaggi analizzare !1>=0 come (!1)>=0 perché (sia in C + e Java) ! ha come priorità più alta rispetto >=.

Così (in C++), (!1)>=0 ->0>=0 ->true ma (in Java) !1 (!int) è un errore di tipo.

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


Java solo definisce il ! operatore sul tipo boolean.

6

In java un operatore ! ha precedenza rispetto all'operatore condizionale >=. Questo perché ha bisogno di parentesi ().

Here è la tabella dei dettagli di precedenza degli operatori di Java.

Tuttavia, in C++ il valore positivo in condizione si riferisce al valore boolean true. Quindi, if(!1>=0) è valido in C++ ma non valido in Java. In Java, il valore boolean è solo true e false. Non considera mai il valore positivo come vero.

+6

In C++ l'operatore '!' Ha anche precedenza più alta di '> ='. – qwertyuiop5040

+3

Non solo i valori positivi sono veri, anche i valori negativi. L'unico valore non vero è 0. –

Problemi correlati