为什么Java中的布尔值只有true或false? 为什么不是1或0呢?
有什么理由为什么Java布尔只采取true
或false
为什么不1
或0
呢?
与C和C ++之类的语言不同,Java将boolean
视为一个完全独立的数据types,它有两个不同的值:true和false。 值1和0是inttypes,不能隐式转换为boolean
。
因为布尔值有两个值: true
或false
。 请注意,这些不是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; }
虽然我不会推荐这个。 注意你不能保证一个int
variables真的是0或1; 并没有100%明显的意思是什么意思是真实的。 另一方面, boolean
variables总是为true
或者为false
,很明显哪一个是真的。 🙂
所以,而不是转换函数,习惯于使用boolean
variables代表真/假概念的一切。 如果您必须使用某种原始文本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
的值具有int
types,并且此时需要一个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。
👍👍快乐的编程..