为什么Java booleans只接受true
或false
,为什么不接受1
或0
呢?
发布于 2010-01-07 02:00:49
与C和C++等语言不同,Java将boolean
视为完全独立的数据类型,它有两个截然不同的值: true和false。值1和0的类型为int,并且不能隐式转换为boolean
。
发布于 2010-01-07 02:00:41
因为布尔值有两个值:true
或false
。请注意,这些不是字符串,而是实际的布尔值。
1和0是整数,没有理由将它们设置为"alternative true“和"alternative false”(或者将Unix退出代码设为“alternative true”和“alternative false”,从而混淆它们。)在Java中使用强类型时,应该只有两个原始布尔值。
编辑:请注意,如果您需要,可以很容易地编写转换函数:
public static boolean intToBool(int input)
{
if (input < 0 || input > 1)
{
throw new IllegalArgumentException("input must be 0 or 1");
}
// Note we designate 1 as true and 0 as false though some may disagree
return input == 1;
}
虽然我不推荐这样做。请注意,您不能保证int
变量真的是0或1;并且没有100%明显的语义来表示真。另一方面,boolean
变量总是 true
或false
,很明显哪个变量的意思是真。:-)
因此,不要使用转换函数,而要习惯于将boolean
变量用于表示真/假概念的所有内容。如果您必须使用某种原始文本字符串(例如,用于存储在平面文件中),"true“和"false”的含义要清晰得多,库方法Boolean.valueOf可以立即将它们转换为布尔值。
发布于 2010-01-07 02:00:58
因为创建Java的人希望boolean表示明确的真或假,而不是1或0。
关于1和0如何转换为布尔值,各语言之间没有达成共识。C使用任何非零值表示true,使用0表示false,但有些UNIX shell的情况正好相反。使用int会削弱类型检查,因为编译器无法防止传入的int值不应该在布尔上下文中使用的情况。
https://stackoverflow.com/questions/2015071
复制相似问题