我正在使用如下所示的条件运算符。
String AccessType = (a.isActive() && b.isActive() ? "Active" : "NotActive");
现在我希望如果 a.active 为真并且 b.active 也是真的,那么结果应该是活动的,但如果最初 a.active 失败,那么 npo 需要测试 b.isactive 只是打印 现在不活跃,请告知我的上述实现是否正确。
您的实现已经正确。"懒惰"方面(仅在a.isActive()
返回 true 时才调用b.isActive()
)由&&
运算符的行为处理,即短路。
从JLS第15.23节开始:
条件和运算符 && 类似于 &(§15.22.2),但仅当其左操作数的值为真时,才会计算其右操作数。
您将其用作条件运算符的条件(第一个操作数)这一事实无关紧要。所以你的代码等效于:
boolean active = a.isActive() && b.isActive();
String AccessType = (active ? "Active" : "NotActive");
不过,我会对您的代码进行两项更改:
- 我不会使用括号。它们是不必要的。你不是在调用一个方法 - 它只是一个条件运算符。
- 我将变量重命名为
accessType
.Java 命名约定对变量使用camelCase
。
所以:
String accessType = a.isActive() && b.isActive() ? "Active" : "NotActive";
看一看 condional 运算符
boolean isAActive = a.isActive();
boolean isBActive = b.isActive();
String AccessType = (isAActive && isBActive) ? "Active" : "NotActive";
而不是
String AccessType = (a.isActive() && b.isActive() ? "Active" : "NotActive");
使用括号中的条件
为了便于阅读,您可以包装条件
a.isActive() && b.isActive()
在圆形括号中()
:
(a.isActive() && b.isActive())
最后也不需要括号。因此,您的最终条件应如下所示:
(a.isActive() && b.isActive()) ? "Active" : "NotActive";
由于括号是可选的,因此条件可以重写为:
a.isActive() && b.isActive() ? "Active" : "NotActive";
1. Now I want that if a.active is true and b.active is also true then
the result should be Active
布尔状态 = a.isActive() && b.isActive();
字符串值 = 状态 ?"活动" : "非活动";
2. if initially a.active fails then no need to test b.isactive
Java遵循短路评估 所以你不需要关心Java会自动这样做