web-dev-qa-db-de.com

Konvertieren Sie boolean in int in Java

Was ist die am meisten akzeptierte Methode zum Konvertieren eines boolean in ein int in Java?

291
hpique
int myInt = myBoolean ? 1 : 0;

^^

PS: wahr = 1 und falsch = 0

493
Jonatha ANTOINE
int val = b? 1 : 0;
148
Grodriguez

Die Verwendung des ternären Operators ist die einfachste, effizienteste und lesbarste Methode, um das zu tun, was Sie möchten. Ich ermutige Sie, diese Lösung zu verwenden.

Ich kann jedoch nicht widerstehen, eine alternative, konstruierte, ineffiziente und unlesbare Lösung vorzuschlagen.

int boolToInt(Boolean b) {
    return b.compareTo(false);
}

Hey, die Leute mögen für solche coolen Antworten stimmen!

Bearbeiten

Ich habe übrigens oft Konvertierungen von einem booleschen in ein int gesehen, um nur einen Vergleich der beiden Werte vorzunehmen (im Allgemeinen in Implementierungen der compareTo-Methode). In diesen speziellen Fällen ist Boolean#compareTo der Weg.

Bearbeiten 2

Java 7 hat eine neue Utility-Funktion eingeführt, die direkt mit primitiven Typen arbeitet, Boolean#compare (Danke shmosel).

int boolToInt(boolean b) {
    return Boolean.compare(b, false);
}
52
barjak
boolean b = ....; 
int i = -("false".indexOf("" + b));
public int boolToInt(boolean b) {
    return b ? 1 : 0;
}

einfach

24
Adam
import org.Apache.commons.lang3.BooleanUtils;
boolean x = true;   
int y= BooleanUtils.toInteger(x);
18
Darkeniel

Das hängt von der Situation ab. Der einfachste Ansatz ist oft der beste, weil er leicht verständlich ist:

if (something) {
    otherThing = 1;
} else {
    otherThing = 0;
}

oder

int otherThing = something ? 1 : 0;

Aber manchmal ist es nützlich, eine Aufzählung anstelle einer booleschen Flagge zu verwenden. Stellen Sie sich vor, es gibt synchrone und asynchrone Prozesse:

Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());

In Java kann enum zusätzliche Attribute und Methoden haben:

public enum Process {

    SYNCHRONOUS (0),
    ASYNCHRONOUS (1);

    private int code;
    private Process (int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}
12

Wenn Sie Apache Commons Lang verwenden (was meiner Meinung nach in vielen Projekten verwendet wird), können Sie es einfach so verwenden: 

int myInt = BooleanUtils.toInteger(boolean_expression); 

Die toInteger-Methode gibt 1 zurück, wenn boolean_expression wahr ist, andernfalls 0

9
triForce420

Wenn Sie true -> 1 und false -> 0-Zuordnung wünschen, können Sie Folgendes tun:

boolean b = true;
int i = b ? 1 : 0; // assigns 1 to i.
8
codaddict

Wenn Sie verschleiern möchten, verwenden Sie Folgendes:

System.out.println( 1 & Boolean.hashCode( true ) >> 1 );  // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
6

Lass uns einen Spieltrick mit Boolean.compare(boolean, boolean) machen. Standardverhalten der Funktion: Wenn beide Werte gleich sind, wird 0 zurückgegeben, andernfalls -1.

public int valueOf(Boolean flag) {
   return Boolean.compare(flag, Boolean.TRUE) + 1;
}

Erläuterung: Wie wir wissen, ist der Standardwert für die Rückgabe von Boolean.compare im Fall einer falschen Übereinstimmung -1, so dass +1 einen Rückgabewert an 0 für False und 1 für True zurückgibt.

1
mumair
public static int convBool(boolean b)
{
int convBool = 0;
if(b) convBool = 1;
return convBool;
}

Dann benutze :

MyClass.convBool(aBool);
0
Regis_AG