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.
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
.
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
.
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 )
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.
Essayez BooleanUtils chez Apache common-lang .
BooleanUtils.toBoolean(0) = Boolean.FALSE
BooleanUtils.toBoolean(1) = Boolean.TRUE
BooleanUtils.toBoolean(2) = Boolean.TRUE
Probablement quelque chose comme ça:
int i == 0 ? false : true;
ou l'inverse:
int i == 1 ? true : false
...
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.
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.