web-dev-qa-db-fra.com

Vérification du résultat "booléen" de type "int"

J'apprends Java en venant de C et j'ai trouvé une différence intéressante entre les langues de type boolean. En C, il n'y a pas de variable bool/ean, nous devons donc utiliser des types numériques pour représenter la logique booléenne (0 == false).

Je suppose qu'en Java cela ne fonctionne pas:

int i = 1;
if (i)
    System.out.println("i is true");

Changer la condition via une conversion de type ne le fait pas non plus:

if ((boolean)i)

Donc en plus de faire quelque chose comme:

if ( i != 0 )

Existe-t-il un autre moyen d'effectuer une vérification de la logique C-ish sur un type int? Je me demandais simplement s'il existait des astuces Java autorisant la logique booléenne sur des types non booléens comme celui-ci.


MODIFIER:
L'exemple ci-dessus était très simpliste et se prêtait à un champ de réflexion étroit. Lorsque j'ai posé la question à l'origine, je pensais aussi aux retours non booléens d'appels de fonction. Par exemple, l'appel fork() sous Linux. Il ne retourne pas une int en soi, mais je pourrais utiliser la valeur de retour numérique pour un conditionnel comme dans:

if( fork() ) {
    // do child code

Cela me permet de traiter le code de manière conditionnelle pour l'enfant, mais pas pour le parent (ou en cas de résultat négatif pour une erreur). 

Donc, je ne connais pas assez de Java pour donner un bon exemple "Java" pour le moment, mais c'était mon intention initiale.

29
Mike

En Java,

if ( i != 0 )

est le moyen idiomatique de vérifier si le nombre entier i diffère de zero.

Si i est utilisé comme indicateur, il doit être de type boolean et non de type int.

39
NPE

Pourquoi ne pas utiliser le type boolean? Cela fonctionnera comme prévu sans la confusion entier/booléen potentiellement problématique.

private boolean isValid;
...
if (!isValid) {
   ...
}

Notez qu'il s'agit de l'approche Java idiomatique. Les bibliothèques tierces l'utilisent, et les utilisateurs de votre API l'utiliseront et l'attendent aussi. Je m'attendrais à ce que les bibliothèques que vous utilisez vous donnent booleans, et en tant que tel, vous traitez simplement ints comme booleans.

5
Brian Agnew

FROM JLS :

Le type booléen a deux valeurs, représentées par les littéraux booléens vrai et faux, formé à partir de ASCII lettres.

Donc non est la réponse. le seul était 

if ( i != 0 )
3
PermGenError

En Java, la condition doit être de type boolean, il ne peut s'agir d'une expression, c'est pourquoi

if( i ) 

n'est pas autorisé

Il faut que ce soit vrai ou faux.

2
Fyre

Essayez BooleanUtils chez Apache common-lang .

  BooleanUtils.toBoolean(0) = Boolean.FALSE
  BooleanUtils.toBoolean(1) = Boolean.TRUE
  BooleanUtils.toBoolean(2) = Boolean.TRUE
1
Tioma

Probablement quelque chose comme ça:

int i == 0 ? false : true;

ou l'inverse:

int i == 1 ? true : false

...

0
Wingie

Si vous insistez pour utiliser int au lieu de boolean, utilisez simplement une méthode pour convertir

class BooleanHelper
{
   public static boolean toBoolean (int pVal) {
      return pVal != 0;
   }
 ...
}

// apply

if (BooleanHelper.toBoolean(i)) { // BooleanHelper could be avoided using static imports...

Cependant, il suffit d'utiliser 

if (i != 0) {

est toujours plus court et plus clair.

0
stefan bachert

Vous pouvez essayer quelque chose comme ça. Boolean i = true; si je) System.out.println ("i est vrai"); 

Il suffit de l’initialiser en tant que valeur booléenne plutôt qu’un entier.

0
Butter Beer