Ceea ce este cel mai acceptat mod de a converti un "boolean" a o int
în Java?
int myInt = myBoolean ? 1 : 0;
^^
PS : adevărat = 1 și false = 0
Folosind operatorul ternar este cel mai simplu, cel mai eficient, și cel mai ușor de citit modalitate de a face ceea ce vrei. Am să vă încurajez să utilizați această soluție.
Cu toate acestea, pot't rezista să propună o alternativă, contrived, ineficient, greu de citit soluție.
int boolToInt(Boolean b) {
return b.compareTo(false);
}
Hei, oamenilor le place să voteze pentru o astfel de rece răspunsuri !
Edit
Apropo, am văzut de multe ori conversii de la un boolean la un int pentru unicul scop de a face o comparație între cele două valori (în general, în implementări de compareTometoda).
Boolean#compareTo` este calea de a merge în aceste cazuri specifice.
Edit 2
Java 7 a introdus o nouă funcție de utilitate care funcționează cu tipuri primitive direct, Boolean#compara
(Multumesc shmosel)
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
boolean b = ....;
int i = -("false".indexOf("" + b));
Asta depinde de situație. De multe ori cea mai simplă abordare este cel mai bun pentru că este ușor de înțeles:
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
sau
int otherThing = something ? 1 : 0;
Dar, uneori, este util de a folosi un Enum în loc de un boolean flag. Să imaginați-vă sunt sincrone și asincrone procese:
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
În Java, enum poate avea atribute suplimentare și metode:
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
Dacă utilizați Apache Commons Lang (pe care cred că o mulțime de proiecte folosesc), se poate folosi doar ca aceasta:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
metodă returnează 1 dacă `boolean_expression este adevărat, 0 altfel
Vă permite să joace truc cu Boolean.compara(boolean boolean)
. Comportamentul implicit al funcției: dacă ambele valori sunt egale decât se întoarce 0
altfel -1
.
public int valueOf(Boolean flag) {
return Boolean.compare(flag, Boolean.TRUE) + 1;
}
Explicație: după Cum știm default return Boolean.compara este -1 în caz de mis-match deci +1 face să se întoarcă valoare 0 pentru "Fals" și 1 pentru "Adevărat"