因此,对于在布尔二元运算符,Java有&,|,^,&&和||.
让我们简要总结一下他们在这里简要介绍的内容:
对于
&,结果值是true两个操作数值是否为true; 否则,结果是false.对于
|,结果值是false两个操作数值是否为false; 否则,结果是true.对于
^,结果值是true操作数值是否不同; 否则,结果是false.该
&&操作是一样&,但是评估其右边的操作数只有在其左侧操作数的值true.该
||操作是一样|的,但评估其右边的操作数只有在其左侧操作数的值false.
现在,所有5间,那些3有复合赋值版本,分别为|=,&=和^=.所以我的问题是显而易见的:为什么不是Java提供&&=和||=呢?我发现我需要那些比我更需要更多的&=和|=.
而且我不认为"因为它太长"是一个很好的答案,因为Java有>>>=.这个遗漏必须有更好的理由.
java conditional-operator short-circuiting assignment-operator compound-assignment
换句话说,以下两个语句的行为方式是否相同?
isFoobared = isFoobared && methodWithSideEffects();
isFoobared &= methodWithSideEffects();
Run Code Online (Sandbox Code Playgroud)
我意识到我可以写一个测试,但有人可能会知道这个,其他人可能会觉得答案很有用.
最近我看到一个代码使用这个:
boolean val = something();
val |= somethingElse();
Run Code Online (Sandbox Code Playgroud)
有趣的部分是| =(二进制)运算符在布尔基元类型上制作.
令我感到惊讶的是,布尔值存在| =存在,好像它是整数类型,并搜索此运算符的Java规范,但找不到任何.
如果左值已经为真,我会好奇是否评估右操作数.
有人能指出我的Java规范吗?
java specifications operators boolean-expression compound-assignment
这是代码段
你能解释一下输出变化的原因吗?
1)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t && ((i++) == 0));
b = (f && ((i+=2) > 0));
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这种情况下的输出为1
2)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t & ((i++) == 0));
b = (f & ((i+=2) …Run Code Online (Sandbox Code Playgroud) 在Delphi中,我可以使用布尔变量执行以下操作:
If NOT bValue then
begin
//do some stuff
end;
Run Code Online (Sandbox Code Playgroud)
Java中的等价物是否使用了!?
If !(bValue) {
//do some stuff
}
Run Code Online (Sandbox Code Playgroud) 在java中的以下代码中:
Notification noti = nBuilder.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
noti.flags |= Notification.FLAG_AUTO_CANCEL;
Run Code Online (Sandbox Code Playgroud)
这个operator(|=)是什么用的?
我在Android SDK文档中找到了以下示例代码:
boolean retValue = false;
retValue |= mActionBarHelper.onCreateOptionsMenu(menu);
retValue |= super.onCreateOptionsMenu(menu);
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我展示相同的代码,以证明这有什么作用?
注意:我假设方法调用返回一个布尔值,所以我想看一个示例,它看起来像if-else结构.
我只是好奇java是如何工作的.有人可以解释为什么getBoolean在案例1中调用而未在案例2中调用?
public class Main {
public static void main(String[] args) {
System.out.println("---------- Case 1 ----------");
boolean b = false;
b &= getBoolean(true);
System.out.println("---------- Case 2 ----------");
b = false;
b = b && getBoolean(true);
}
private static boolean getBoolean(boolean bool) {
System.out.println("getBoolean(" + bool + ") was called\n");
return bool;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
---------- Case 1 ----------
getBoolean(true) was called
---------- Case 2 ----------
Run Code Online (Sandbox Code Playgroud)