Conversion booléen en int en Java

Quelle est la façon la plus acceptée de convertir un boolean en un int en Java?

274
demandé sur Unihedron 2010-09-25 15:48:17

12 réponses

int myInt = myBoolean ? 1 : 0;

^ ^

PS: true = 1 et false = 0

469
répondu Jonatha ANTOINE 2018-04-15 18:23:29
int val = b? 1 : 0;
144
répondu Grodriguez 2010-09-25 11:52:52

L'utilisation de 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 peux pas résister à proposer une solution alternative, artificielle, inefficace, illisible.

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

Hé, les gens aiment voter pour des réponses si cool !

Modifier

d'ailleurs, j'ai souvent vu des conversions d'un boolé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.

Edit 2

Java 7 introduit une nouvelle fonction d'utilité qui fonctionne avec les types primitifs directement, Boolean#compare (Merci shmosel )

int boolToInt(boolean b) {
    return Boolean.compare(b, false);
}
51
répondu barjak 2014-10-14 22:58:14
boolean b = ....; 
int i = -("false".indexOf("" + b));
38
répondu Thorbjørn Ravn Andersen 2010-09-25 17:44:43
public int boolToInt(boolean b) {
    return b ? 1 : 0;
}

simple

24
répondu Adam 2010-09-25 16:15:55

cela dépend de la situation. Souvent, l'approche la plus simple est la meilleure parce qu'elle est facile à comprendre:

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

ou

int otherThing = something ? 1 : 0;

Mais parfois utile d'utiliser un Enum au lieu d'un drapeau booléen. Imaginons qu'il y ait des processus synchrones et asynchrones:

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

en Java, enum peut avoir des attributs 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;
    }
}
12
répondu Hendrik Brummermann 2010-09-25 11:55:36
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;   
int y= BooleanUtils.toInteger(x);
12
répondu Darkeniel 2015-12-23 19:38:06

si true -> 1 et false -> 0 la cartographie est ce que vous voulez, vous pouvez faire:

boolean b = true;
int i = b ? 1 : 0; // assigns 1 to i.
8
répondu codaddict 2010-09-25 11:50:37

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 la méthode retourne 1 si boolean_expression est vrai, 0 autrement

7
répondu triForce420 2017-06-01 12:17:57

si vous voulez obscurcir, utilisez ceci:

System.out.println( 1 & Boolean.hashCode( true ) >> 1 );  // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
4
répondu Christian Ullenboom 2016-06-11 08:42:14

permet de jouer avec Boolean.compare(boolean, boolean) . Comportement par défaut de la fonction: si les deux valeurs sont égales, renvoie 0 sinon -1 .

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

explication : comme nous le savons retour par défaut de booléen.comparer est de -1 en cas d'erreur, donc +1 valeur de retour de 0 pour False et 1 pour True

1
répondu mumair 2017-01-06 07:05:25
public static int convBool(boolean b)
{
int convBool = 0;
if(b) convBool = 1;
return convBool;
}

ensuite utiliser:

MyClass.convBool(aBool);
0
répondu Regis_AG 2018-06-13 18:31:28