java中怎么定义true或false_为什么Java中的布尔值只接受true或false? 为什么也不要1或0?...

有什么理由为什么Java布尔值仅采用true或false为什么不采用1或0?

这不是一个复杂的问题,但是我也没有理由反对。

您忘记了FILE_NOT_FOUND

因为它是强类型的

在Java中,只能使用" true"和" false"来确定布尔条件。 您不能像在C和C ++中那样将其他原始类型用作默认的" true"或" false"。

因为它是用这种方式定义的。 纳夫说。

因为它是f * king布尔值!)))))))数字会搞砸概念并鼓励混淆代码。

为了克服这个问题,我使用了boolean bValue = Integer.valueOf(strValue) > 0;

因为0或1是数字,而不是布尔值。

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

在JVM级别上,布尔值,字节,短型,字符和整数都被视为整数,并且布尔值确实表示为0和1。因此,"不可隐式转换"仅在Java语言级别。

另外,Java公开尝试从过去学习,以便消除所有类别的错误。例如范围从小功能(无隐式布尔表达式)到大功能(垃圾收集)

从克里斯的观点出发,写char x =(char)88945是合法的;或char y =(char)-489;。

C最初没有bool类型,因此您必须使用0或1。

您没有真正回答问题。他们问为什么。

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

1和0是整数,没有理由通过将它们设置为" alternative true"和" alternative false"来混淆事物(对于使用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变量始终是true或false,很明显,哪个变量是true。 :-)

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

+1:同样的原因" x"不是数字,而123不是日期。

对此进行具体说明会使您远离VB中的TRUE为-1,而在其他语言中则为NON ZERO。保持布尔字段为true或false会使java不在此参数范围内。

因为创建Java的人希望boolean明确表示true或false,而不是1或0。

语言之间尚无关于1和0如何转换为布尔值的共识。 C使用任何非零值表示true,使用0表示false,但是某些UNIX shell则相反。使用int会削弱类型检查,因为编译器无法防止传入的int值不应该在布尔上下文中使用的情况。

最后一段实际上是在讨论布尔值如何转换为int,而不是相反。是的,在C int foo = (a!=b);中将为0或1。但是在C中,任何非0值在布尔上下文中均为" true"。 if(foo)不检查foo==1,而是检查foo!=0。因此,如果您编写if(foo),则编译器肯定会处理它。仅当您执行_Bool equal = a & b之类的操作时,您才会遇到麻烦,因为4 & 2 == 0即使它们都为真。我认为这就是您要提出的重点。

其他答案未指出的一件事是,不将整数视为真值的一个优点是,它避免了这种C / C ++错误综合症:

int i = 0;

if (i = 1) {

print("the sky is falling!

");

}

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

在Java中,这是编译错误,因为分配i = 1的值具有类型int,并且此时需要boolean。在Java中遇到麻烦的唯一情况是,如果您编写这样的me脚代码:

boolean ok = false;

if (ok = true) {  // bug and lame style

print("the sky is falling!

");

}

...任何具有"良好品味"的人都会写成...

boolean ok = false;

if (ok) {

print("the sky is falling!

");

}

相关说明:由于JVM对布尔类型的支持有限,因此Java编译器使用int表示布尔值。请参见第3.3.4节布尔类型。

在JVM中,整数零表示false,任何非零整数表示true

(来源:Bill Venners撰写的Inside Java Virtual Machine)

从技术上讲这是三个方面的错误。 1)Java编译器不"代表"布尔值。它生成字节码。 2)字节码处理的是对象字段,抽象堆栈插槽和数组中的插槽。在某些情况下,保存boolean值的插槽映射为32位字(在典型的JVM实现中),但这并不意味着JVM将其视为ints。 3)在boolean[]中,用于容纳一个元素的插槽为8位,而不是32位。

我也要警惕依靠教科书作为此书的来源。最终的来源是JVM规范所说的,而不是某些作者为了使目标读者可以理解而提出的"旋转"。 (我还没有读过这本书,所以不要把它当作对它的批评。它只是一个警告……)

@StephenC"将对布尔值进行操作的Java编程语言表达式编译为使用Java虚拟机int数据类型的值" docs.oracle.com/javase/specs/jvms/se8/html/

同一部分还说:" Java虚拟机使用1表示true和0表示false对布尔数组组件进行编码。在Java编程语言布尔值由编译器映射为Java Virtual Machine类型int的值的情况下,编译器必须使用相同的编码。" -第一句话与Bill Venners的报价直接矛盾。第二句话有一个有趣的细微差别。

细微之处在于,这并不是说Java编译器必须使用JVM int类型来表示Java boolean类型。此外@mdewit,您引用的文本1)实际上仅适用于表达式,而2)只是描述性的,而不是描述性的。 (并没有说Java编译器必须将其编译为JVM int类型。)

我同意Bill Venners的报价绝对不正确。因此,由于该文档仅声明将表达式编译为使用int数据类型的值(我想选择int是因为它是使用效率最高的原语),我想知道还有什么其他方法比映射更合理使用?布尔值作为一个int。对于布尔数组,将它们映射为字节是有意义的,因为实际上将使用较少的空间,但是这种担心不适用于单个值。无论如何,谢谢您的解释。

对此进行具体说明会使您远离VB中的TRUE为-1,而在其他语言中则为NON ZERO。保持布尔字段为true或false会使java不在此参数范围内。

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

在c和C ++中,没有称为BOOLEAN的数据类型

这就是为什么它使用1和0作为真实的假值。

并且在JAVA 1和0中被视为INTEGER类型,因此在Java中会产生错误。 Java具有自己的布尔值true和false,以及布尔数据类型。

????快乐的编程.. ??

C ++具有bool类型,并且true和false是关键字。 C11有_Bool,或者您可以#include获取bool。 区别在于整数和指针类型可隐式转换为布尔值,因此您可以编写bool condition = a而不是bool condition = (a!=0);。 或if(a){}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值