java 布尔值属于_Java中的布尔值与布尔值

我有点扩展了提供的答案(因为到目前为止,他们专注于他们自己的“自己的” /人工术语,侧重于对特定语言进行编程,而不是照顾一般情况下(即当事情发生时)创建编程语言的幕后情景。就像类型安全性与内存注意事项有所不同):

int不是布尔值

考虑

boolean bar = true;

System.out.printf("Bar is %b\n", bar);

System.out.printf("Bar is %d\n", (bar)?1:0);

int baz = 1;

System.out.printf("Baz is %d\n", baz);

System.out.printf("Baz is %b\n", baz);

带输出

Bar is true

Bar is 1

Baz is 1

Baz is true

第3行上的Java代码(bar)?1:0说明,不能将bar(布尔值)隐式转换(转换)为int。我提出这一点并不是为了说明JVM背后的实现细节,而是要指出,就低级考虑(作为内存大小)而言,确实要优先于值而不是类型安全。特别是如果没有像布尔类型那样真正/完全使用类型安全性,在布尔类型中以

如果值\ in {0,1},则强制转换为布尔类型,否则抛出异常。

所有人只是说{0,1}

字节不是类型或位

请注意,在内存中,{0,1}范围内的变量仍将至少占据一个字节或一个字(x位,取决于寄存器的大小),除非特别注意(例如,很好地包装在内存中-8个“布尔值”位变成1个字节-来回)。

通过优先于类型安全性(例如,将值放入/包装到特定类型的盒子中)而不是额外的值打包(例如,使用移位或算术),人们确实选择了编写更少的代码而不是获得更多的内存。(另一方面,总是可以定义一个自定义用户类型,这将促进所有不值得布尔值的转换)。

关键字与类型

最后,您的问题是关于比较关键字和类型。我认为,重要的是要解释为什么/不通过使用关键字(“标记为原始 ”的关键字)优先于类型(使用其他关键字类的常规复合用户可定义的类)或换句话说,将获得性能的原因或方式。

boolean foo = true;

Boolean foo = true;

第一个“事物”(类型)不能没有理由地扩展(子类化)。实际上,可以将原始类和 包装类的Java术语简单地转换为内联值(一个LITERAL或一个常量,只要有可能推断出替代,或者如果不能-仍然回退到包装值,则由编译器直接替换该常量)。

优化是由于琐碎的:

“更少的运行时转换操作=>更快的速度。”

这就是为什么当完成实际的类型推断时,如果有必要的话,它可能(仍然)最终用所有类型信息实例化包装类(或将其转换/转换为此类)。

因此,布尔值和布尔值之间的区别恰好在编译和运行时(有点远,但几乎与instanceof与getClass()一样)。

最后,自动装箱比原始装箱慢

注意Java可以自动装箱的事实只是“语法糖”。它不会加快任何速度,只是允许您编写更少的代码。而已。仍将类型转换和包装到类型信息容器中。出于性能原因,请选择算法,该算法将始终跳过使用类型信息创建类实例以实现类型安全性的额外工作。缺乏类型安全性是您获得性能的代价。对于具有布尔值表达式的代码,类型安全(当您编写更少并因此隐式代码时)对于例如if-then-else流控制至关重要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值