webentwicklung-frage-antwort-db.com.de

Überprüfung des "booleschen" Ergebnisses eines "int" -Typs

Ich lerne Java, komme von C und habe mit dem Typ boolean einen interessanten Unterschied zwischen den Sprachen gefunden. In C gibt es keine bool/ean, daher müssen wir numerische Typen verwenden, um die boolesche Logik (0 == false) darzustellen.

Ich denke, in Java funktioniert das nicht:

int i = 1;
if (i)
    System.out.println("i is true");

Die Bedingung wird auch nicht über eine Typumwandlung geändert:

if ((boolean)i)

Also neben etwas zu tun:

if ( i != 0 )

Gibt es eine andere Möglichkeit, eine C-ish-Logikprüfung für einen int-Typ durchzuführen? Ich frage mich nur, ob es Java-Tricks gibt, die eine boolesche Logik für solche nicht-booleschen Typen zulassen.


BEARBEITEN:
Das obige Beispiel war sehr simpel und führt zu einem engen Denken. Als ich die Frage ursprünglich stellte, dachte ich auch über nicht-boolesche Rückgaben von Funktionsaufrufen nach. Zum Beispiel der Linux-Aufruf fork(). Es gibt kein int per se zurück, aber ich könnte den numerischen Rückgabewert für eine Bedingung gut verwenden, wie in:

if( fork() ) {
    // do child code

Dadurch kann ich den Code in der Bedingung für das untergeordnete Element verarbeiten, nicht jedoch für das übergeordnete Element (oder im Fall eines negativen Ergebnisses für einen Fehler). 

Ich kenne also nicht genug Java, um im Moment ein gutes "Java" -Beispiel zu geben, aber das war meine ursprüngliche Absicht.

29
Mike

In Java

if ( i != 0 )

ist die idiomatische Methode, um zu prüfen, ob sich die Ganzzahl i von zero unterscheidet.

Wenn i als Flag verwendet wird, sollte es vom Typ boolean und nicht vom Typ int sein.

39
NPE

Warum nicht den Typ boolean verwenden? Das funktioniert wie erwartet ohne die potentiell problematische Integer/Boolean-Verknüpfung.

private boolean isValid;
...
if (!isValid) {
   ...
}

Beachten Sie, dass dies der idiomatische Java-Ansatz ist. Bibliotheken von Drittanbietern verwenden dies, und die Benutzer Ihrer API werden dies auch erwarten und erwarten. Ich würde Libs erwarten, die Sie verwenden, um Ihnen booleans zu geben, und als solche behandeln Sie ints einfach als booleans.

5
Brian Agnew

FROM JLS :

Der boolesche Typ hat zwei Werte, die durch die booleschen Literale dargestellt werden true und false, gebildet aus ASCII Buchstaben.

Also nein ist die Antwort. das einzige was ist 

if ( i != 0 )
3
PermGenError

In Java muss die Bedingung vom Typ boolean sein, daher kann dies kein Ausdruck sein

if( i ) 

ist nicht erlaubt

Es muss entweder wahr oder falsch sein.

2
Fyre

Versuchen Sie BooleanUtils aus Apache common-lang .

  BooleanUtils.toBoolean(0) = Boolean.FALSE
  BooleanUtils.toBoolean(1) = Boolean.TRUE
  BooleanUtils.toBoolean(2) = Boolean.TRUE
1
Tioma

Wahrscheinlich so etwas wie:

int i == 0 ? false : true;

oder umgekehrt:

int i == 1 ? true : false

...

0
Wingie

Wenn Sie darauf bestehen, int anstelle von boolean zu verwenden, verwenden Sie einfach Verwenden Sie eine zu konvertierende Methode

class BooleanHelper
{
   public static boolean toBoolean (int pVal) {
      return pVal != 0;
   }
 ...
}

// apply

if (BooleanHelper.toBoolean(i)) { // BooleanHelper could be avoided using static imports...

Verwenden Sie jedoch einfach 

if (i != 0) {

ist noch kürzer und klarer.

0
stefan bachert

Sie könnten so etwas versuchen. Boolesches i = wahr; wenn ich) System.out.println ("i is true"); 

Initialisieren Sie es einfach als booleschen Wert und nicht als Ganzzahl.

0
Butter Beer