为什么Java中的布尔值只有true或false? 为什么不是1或0呢?

有什么理由为什么Java布尔只采取truefalse为什么不10呢?

与C和C ++之类的语言不同,Java将boolean视为一个完全独立的数据types,它有两个不同的值:true和false。 值1和0是inttypes,不能隐式转换为boolean

因为布尔值有两个值: truefalse 。 请注意,这些不是string,而是实际的布尔文字。

1和0是整数,并且没有理由通过使它们成为“可选的真实”和“可选的错误”(或者用于Unix退出代码的其他方法?)来混淆事物。 在Java中强大的input应该只有两个原始的布尔值。

编辑:请注意,如果你想要,你可以轻松地写一个转换函数:

 public static boolean intToBool(int input) { if (input < 0 || input > 1) { throw new IllegalParameterException("input must be 0 or 1"); } // Note we designate 1 as true and 0 as false though some may disagree return input == 1; } 

虽然我不会推荐这个。 注意你不能保证一个intvariables真的是0或1; 并没有100%明显的意思是什么意思是真实的。 另一方面, booleanvariables总是true或者为false ,很明显哪一个是真的。 🙂

所以,而不是转换函数,习惯于使用booleanvariables代表真/假概念的一切。 如果您必须使用某种原始文本string(例如,用于存储在一个平面文件中),“true”和“false”在它们的意义上会更清晰,并且可以通过库方法Boolean.valueOf立即变为布尔值。

因为创buildJava的人需要布尔值来表示真或假,而不是1或0。

关于1和0如何转换为布尔值,语言并没有达成共识。 C使用1表示true,而0表示false,但是一些UNIX shell却相反。 使用整数弱化了types检查,除了1或0之外的整数值可以传入,编译器无法防范。

其他答案没有指出的一个问题是,不把整数看作真值的一个好处是避免了这个C / C ++ bug综合症:

 int i = 0; if (i = 1) { print("the sky is falling!\n"); } 

在C / C ++中,错误地使用=而不是==会导致条件意外地评估为“真实”,并将i更新为偶然的副作用。

在Java中,这是一个编译错误,因为assigment i = 1的值具有inttypes,并且此时需要一个boolean 。 在Java中遇到麻烦的唯一情况是如果你写这样的代码:

 boolean ok = false; if (ok = true) { // bug and lame style print("the sky is falling!\n"); } 

任何有“好味道”的人都会写作…

 boolean ok = false; if (ok) { print("the sky is falling!\n"); } 

具体关于这个让你远离整个真正的VB是-1,在其他语言中,真正的只是非零。 将布尔字段保持为true或false,使java不在此参数之内。

相关说明:java编译器使用int来表示布尔值,因为JVM 对布尔types的支持有限。请参见部分3.3.4布尔types 。

在JVM中,整数零表示false ,任何非零整数表示true (来自Bill Venners的Java虚拟机内部 )

在C和C ++中没有数据types叫BOOLEAN这就是为什么它使用1和0作为真假值。 并在JAVA 1和0计数为INTEGERtypes,所以它在Java中产生错误。 而java有自己的布尔值true和false与布尔数据types。

👍👍快乐的编程..