booleanJava 中没有按位 *** 作。
&并且
|不在Java中执行按位运算,而是在逻辑运算中进行 *** 作(如 JLS的
§15.22.2中所指定)。
&
是逻辑AND(true
如果且仅当两个参数都为时,它将求和true
)|
是逻辑“或”(true
如果且仅当至少一个参数为时,它将求和true
)。
请注意, 同一
运营商用于位运算,但这些只有在两个 *** 作数都是一个类型,可转换为一个整数类型的应用(即
byte,
char,
short,
int,
long和各自的包装)。
由于这篇文章引起了一些热烈的讨论,我想澄清一下我对“按位”运算与“逻辑”运算之间的区别的坚持。
首先: 是 ,在 某种程度上 ,这两个 *** 作将完全一样地工作,除了它们的输入大小(由于优化,它们甚至可能是相同的)。
但是 ,这里至少有3个级别:
- Java语言
Java语言规范使用两个值和定义
boolean为原始类型
true``false。它并
没有
为这些值定义的数值并没有将其转换为数值型,反之亦然没有直接的方法(见的最后一句§4.2.2)
- Java虚拟机
Java虚拟机规范
定义了该
boolean类型,但是对此类型的支持很少。
它还说明了有关转化的信息
Java虚拟机
boolean使用1表示true和0表示false对数组组件进行编码。在Java编程语言boolean值由编译器映射到Java虚拟机类型的值的情况下int,编译器必须使用相同的编码。
在 最简单的 到fullfil在JVM这一要求的方式显然是让
1是
true和
0是假的,让转换 *** 作是一个空 *** 作。这也是最可能的实现,但
不一定 是唯一正确的实现。
- 硬体
这变化很大,但是大多数CPU不支持某种
boolean类型(为什么要这样做?),因此
boolean此处的 *** 作将使用常规的按位 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)