对于逻辑运算符,操作数必须是 boolean
类型
假设以下代码: -
int p,q;
p=1;
q=1;
System.out.println("The result is : "+(p&q));
结果是: 1
我的问题是,在上面的代码中,两个变量都不是布尔类型。那么为什么这段代码不会产生错误?
另外
System.out.println(" This is an error : "+(!p));
为什么这句话会产生错误?
答案 0 :(得分:4)
虽然用于它的符号看起来很相似,但这不是布尔运算,
它是按位操作并返回int
,而不是boolean
。另见:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
请注意,您使用了&
(按位AND)而不是&&
(逻辑AND)。
答案 1 :(得分:2)
p&q
是两个整数的按位AND,而不是逻辑运算符。
!p
无效,因为整数上没有!
一元运算符。 !
仅定义为布尔值。
答案 2 :(得分:1)
&
是按位运算符。
二进制AND运算符将一个位复制到结果中(如果它存在于两个操作数中
)
例如在你的情况下。
p = 1(int)= 0001(二进制) q = 1(int)= 0001(二进制)
0001
& 0001
---------
0001
在int。中导致0001 = 1
另一方面, &&
是逻辑运算符,需要布尔操作数。
调用逻辑AND运算符。如果两个操作数均为非零,则条件成立。
另外!
也是逻辑运算符和必需的布尔操作数。
被称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,那么Logical NOT运算符将为false。
供参考,visit this site.