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

Gur*_*lki 44 java boolean

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

Jar*_*Par 47

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

  • 在JVM级别,boolean,byte,short,char和int都被视为int,而boolean实际上表示为0和1.因此"not implicitly convertible"仅在Java语言级别. (27认同)
  • 你没有真正回答这个问题.他们问*为什么*. (8认同)
  • 此外,Java公开尝试从过去学习,以便删除所有类别的错误.例如,这个范围从小特征(没有隐式布尔表达式)到大(垃圾收集) (6认同)
  • C最初没有bool类型,所以你必须使用0或1. (2认同)

And*_*yle 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;
}
Run Code Online (Sandbox Code Playgroud)

虽然我不推荐这个.注意你怎么不能保证int变量真的是0或1; 并且没有100%明显的语义意味着什么是真实的.另一方面,boolean变量总是一个true或者false很明显哪个变量是真的.:-)

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

  • +1:同样的原因"x"不是数字,123不是日期. (11认同)

Nat*_*hes 17

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

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


Ste*_*n C 16

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

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

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

在Java中,这是一个编译错误,因为该分配的值i = 1具有类型,int并且boolean此时需要a .你在Java中遇到麻烦的唯一情况是你写下这样的蹩脚代码:

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

......任何有一点"好味道"的人都会写成......

boolean ok = false;
if (ok) {
    print("the sky is falling!\n");
}
Run Code Online (Sandbox Code Playgroud)