有没有什么理由为什么Java布尔只采取true
或false
为什么不采取1
或0
也采取?
Jar*_*Par 47
与C和C++等语言不同,Java将其boolean
视为完全独立的数据类型,它具有2个不同的值:true和false.值1和0的类型为int,并且不可隐式转换为boolean
.
And*_*yle 29
因为布尔值有两个值:true
或false
.请注意,这些不是字符串,而是实际的布尔文字.
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立即转换为布尔值.
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)
归档时间: |
|
查看次数: |
87056 次 |
最近记录: |