Pourquoi booléen en Java ne prend que vrai ou faux? Pourquoi pas 1 ou 0 aussi?
Est-il une raison pourquoi Java booléens ne prendre que true
ou false
pourquoi ne pas 1
ou 0
aussi?
- Pas un système sophistiqué de question, mais je ne vois aucune raison pour qu'un downvote soit.
- Vous avez oublié
FILE_NOT_FOUND
- Parce qu'il est fortement typé
- En java, vous pouvez utiliser uniquement "vrai" et "faux" pour déterminer la condition booléenne. Vous ne pouvez pas utiliser d'autres type primitif en tant que par défaut à "true" ou "false" comme en C et C++.
- Parce qu'il est défini de cette façon. 'nuff said.
- Parce que c'est la f*roi boolean!))))))) Nombre de bousiller le concept et les encourager code source de confusion.
- Pour surmonter ce problème, j'ai utilisé
boolean bValue = Integer.valueOf(strValue) > 0;
- Parce que
0
ou1
sont des nombres, pas des valeurs booléennes.
Vous devez vous connecter pour publier un commentaire.
Java, contrairement à des langages comme le C et le C++, traite
boolean
comme un tout autre type de données qui a 2 valeurs distinctes: le vrai et le faux. Les valeurs 1 et 0 sont de type int et ne sont pas implicitement convertibleboolean
.Parce que les booléens avoir deux valeurs:
true
oufalse
. Notez que ce ne sont pas des chaînes de caractères, mais réelle littéraux booléens.1 et 0 sont des entiers, et il n'y a pas de raison de confondre les choses en les faisant "alternatifs " vraie" et "fausse alternative" (ou l'inverse pour ceux qui sont utilisés pour Unix codes de sortie?). Avec un typage fort en Java il ne devrait jamais être exactement deux primitives des valeurs booléennes.
EDIT: Notez que vous pouvez facilement écrire une fonction de conversion si vous le souhaitez:
Bien que je ne recommanderais pas cela. Notez comment vous ne pouvez pas garantir qu'un
int
vraiment variable est 0 ou 1; et il n'y a pas 100% évident sémantique de ce que l'on veut dire vrai. D'autre part, unboolean
variable est toujours soittrue
oufalse
et il est évident que ce qui signifie vrai. 🙂Ainsi, au lieu de la fonction de conversion, de s'habituer à l'aide de
boolean
variables pour tout ce qui représente un vrai/faux concept. Si vous devez utiliser un certain type de texte primitif de la chaîne (par exemple, pour le stockage dans un fichier plat), "vrai" et "faux" sont beaucoup plus claires dans leurs sens, et peut être immédiatement transformé en un booléen par la méthode de bibliothèque Boolean.valueOf.Parce que les gens qui ont créé Java voulais booléen pour signifier sans ambiguïté vrai ou faux, pas 1 ou 0.
Il n'y a pas de consensus entre les langues sur la façon de 1 et de 0 convertir des booléens. C utilise 1 à dire vrai et 0 pour signifier faux, mais certains shells UNIX à faire le contraire. À l'aide ints affaiblit la vérification de type, une valeur entière en plus 1 ou 0 pourrait être adoptée dans le et le compilateur ne pouvait pas garde contre elle.
int
, pas l'inverse. Oui, en Cint foo = (a!=b);
sera de 0 ou 1. Mais en C, tous les non-valeur 0 est "vrai" dans un contexte booléen.if(foo)
ne vérifie pasfoo==1
, il vérifiefoo!=0
. Donc si vous écrivezif(foo)
, le compilateur n'a décidément le gérer. C'est seulement si vous faites quelque chose comme_Bool equal = a & b
que vous obtenez en difficulté, parce que4 & 2 == 0
même si elles sont toutes les deux vraies. Je pense que c'était le point que vous essayez de faire.Une chose que les autres réponses ne l'ai pas souligné, c'est que l'un des avantages de ne pas traiter des entiers comme des valeurs de vérité, c'est qu'il évite ce C /C++ bug syndrome:
En C /C++, l'usage erroné de la
=
plutôt que==
les causes de cette affection inattendue d'évaluer la valeur "true" et de mettre à jouri
comme accidentelle d'effets secondaires.En Java, c'est une erreur de compilation, car la valeur de l'affectation
i = 1
a typeint
et unboolean
est nécessaire à ce point. Le seul cas où vous auriez des ennuis en Java, si vous écrivez boiteux code comme ceci:... lequel n'importe qui avec une once de "bon goût" écrire comme ...
Être particulière à ce sujet vous tient à l'écart de l'ensemble de VRAI dans VB est -1 et dans d'autres langues vrai, c'est juste NON nul. En gardant le champ booléen true ou false garde java en dehors de cet argument.
Sur une note connexe: le compilateur java utilise int pour représenter boolean depuis JVM a un support limité pour le type boolean.Voir La Section 3.3.4 Le type booléen.
Dans la JVM, le nombre entier zéro représente false, et un entier différent de zéro représente true
(Source : À L'Intérieur De La Machine Virtuelle Java par Bill Venners)
boolean
les valeurs de la carte de 32 bits (typiquement sur une JVM), mais cela ne signifie pas que la JVM pense à eux comme étantints
. 3) Dans unboolean[]
, la fente utilisée pour contenir un élément est de 8 bits au lieu de 32.int
type pour représenter la Javaboolean
type. En outre @mdewit, le texte que vous avez cité 1) ne s'applique qu'aux expressions et 2) est plutôt descriptive que prescriptive. (Cela ne veut pas dire qu'un compilateur Java doit compiler à la JVM de type int.)Même si il y a un bool (court booléenne) type de données en C++. Mais en C++, une valeur différente de zéro est un vrai valeur incluant les nombres négatifs. Un 0 (zéro) est traitée comme faux. Où, comme en JAVA, il existe un type de données booléen pour vrai et faux.
En c et C++ il n'y a pas de type de données appelé BOOLEAN
C'est pourquoi il utilise des 1 et des 0 en tant que vraie valeur false.
et en JAVA 1 et 0 sont compter comme un type ENTIER, de sorte qu'il produit des erreurs en java. Et java ont ses propres valeurs booléennes true et false par le type de données boolean.
heureux de programmation..
bool
type, ettrue
etfalse
sont des mots clés. C11 a_Bool
, ou vous pouvez#include <stdbool.h>
pour obtenirbool
. La différence est que les entiers et les types de pointeur sont implicitement convertible booléen, donc vous pouvez écrirebool condition = a
au lieu debool condition = (a!=0);
. Ouif(a){}