Conversion de booléen en int en Java

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);