为什么Java中的boolean只接受true或false?为什么不是1或0呢?

时间:2010-01-06 17:58:44

标签: java boolean

有没有理由为什么Java布尔只采用truefalse为什么不10

8 个答案:

答案 0 :(得分:46)

与C和C ++等语言不同,Java将boolean视为完全独立的数据类型,它具有2个不同的值:true和false。值1和0的类型为int,不能隐式转换为boolean

答案 1 :(得分:29)

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

1和0是整数,并且没有理由通过使它们成为“替代真实”和“替代假”(或者用于Unix退出代码的那种方式相反的方式来混淆事物?)。在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变量总是 truefalse,显然哪一个是真的。 : - )

因此,代替转换函数,习惯于将boolean变量用于表示真/假概念的所有内容。如果必须使用某种原始文本字符串(例如,用于存储在平面文件中),则“true”和“false”的含义更清晰,并且可以通过库方法{{3}立即转换为布尔值}。

答案 2 :(得分:17)

因为创建Java的人希望布尔值明确地表示真或假,而不是1或0。

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

答案 3 :(得分:16)

其他答案没有指出的一点是,不将整数视为真值的一个好处是它避免了这个C / C ++ bug综合症:

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

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

在Java中,这是一个编译错误,因为分配i = 1的值具有类型int,并且此时需要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");
}

答案 4 :(得分:3)

具体这一点让你远离VB中的整个TRUE是-1而在其他语言中,true就是NON ZERO。将布尔字段保持为true或false会使java保持在此参数之外。

答案 5 :(得分:3)

相关说明:java编译器使用 int 来表示 boolean ,因为JVM对布尔类型的支持有限。请参见Section 3.3.4 The boolean type

在JVM中,整数零表示 false ,任何非零整数表示 true (资料来源:Bill Venners的Inside Java Virtual Machine

答案 6 :(得分:1)

即使C ++中有bool(布尔值的缩写)数据类型。但是在C ++中,任何非零值都是包含负数的 true 值。 0(零)被视为 false 。在JAVA中,对于 true false ,有一个单独的数据类型布尔值。

答案 7 :(得分:-3)

在c和C ++中,没有名为BOOLEAN的数据类型 这就是为什么它使用1和0作为真假值。 并且在JAVA 1和0中计为INTEGER类型,因此它在java中产生错误。并且java有自己的布尔值true和false,带有布尔数据类型。

快乐编程..