Quelle est la manière la plus acceptée de convertir un boolean
en int
en Java?
int myInt = myBoolean ? 1 : 0;
^^
PS: vrai = 1 et faux = 0
int val = b? 1 : 0;
Utiliser l’opérateur ternaire est la manière la plus simple, la plus efficace et la plus lisible de faire ce que vous voulez. Je vous encourage à utiliser cette solution.
Cependant, je ne résiste pas à proposer une solution alternative, artificielle, inefficace et illisible.
int boolToInt(Boolean b) { return b.compareTo(false); }
Hé, les gens aiment voter pour de telles réponses géniales!
modifier
Au fait, j’ai souvent vu des conversions d’un booléen en un int dans le seul but de faire une comparaison des deux valeurs (généralement, dans les implémentations de la méthode compareTo
). Boolean#compareTo
est la voie à suivre dans ces cas spécifiques.
Modifier 2
Java 7 a introduit une nouvelle fonction utilitaire qui fonctionne directement avec les types primitifs, Boolean#compare
(Merci shmosel )
int boolToInt(boolean b) { return Boolean.compare(b, false); }
boolean b = ....; int i = -("false".indexOf("" + b));
public int boolToInt(boolean b) { return b ? 1 : 0; }
simple
Cela dépend de la situation. L’approche la plus simple est souvent la meilleure car elle est facile à comprendre:
if (something) { otherThing = 1; } else { otherThing = 0; }
ou
int otherThing = something ? 1 : 0;
Mais parfois, il est utile d’utiliser un Enum au lieu d’un drapeau booléen. Imaginons qu’il existe des processus synchrones et asynchrones:
Process process = Process.SYNCHRONOUS; System.out.println(process.getCode());
En Java, enum peut avoir des atsortingbuts et des méthodes supplémentaires:
public enum Process { SYNCHRONOUS (0), ASYNCHRONOUS (1); private int code; private Process (int code) { this.code = code; } public int getCode() { return code; } }
import org.apache.commons.lang3.BooleanUtils; boolean x = true; int y= BooleanUtils.toInteger(x);
Si true -> 1
et false -> 0
est ce que vous voulez, vous pouvez faire:
boolean b = true; int i = b ? 1 : 0; // assigns 1 to i.
Si vous utilisez Apache Commons Lang (que je pense que beaucoup de projets l’utilisent), vous pouvez simplement l’utiliser comme ceci:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
méthode toInteger
renvoie 1 si boolean_expression
est vraie, 0 sinon
Si vous voulez brouiller, utilisez ceci:
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1 System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
Permet de jouer à Boolean.compare(boolean, boolean)
. Comportement par défaut de la fonction: si les deux valeurs sont égales, elle renvoie 0
sinon -1
.
public int valueOf(Boolean flag) { return Boolean.compare(flag, Boolean.TRUE) + 1; }
Explication : Comme nous le soaps, le retour par défaut de Boolean.compare est égal à -1 en cas de correspondance incorrecte, donc +1 à 0 pour False
et 1 pour True
public static int convBool(boolean b) { int convBool = 0; if(b) convBool = 1; return convBool; }
Ensuite, utilisez:
MyClass.convBool(aBool);