0

我正在使用条件运算符,如下所示..

String AccessType = (a.isActive() && b.isActive() ? "Active" : "NotActive");

现在我希望如果 a.active 为真并且 b.active 也为真,那么结果应该是 Active 但如果最初 a.active 失败,那么 npo 需要测试 b.isactive 只是 print Not active now 请告知我上面的实现是正确与否。

4

4 回答 4

3

您的实现已经正确。“懒惰”方面(仅b.isActive()a.isActive()返回 true 时调用)由&&操作符的行为处理,即短​​路

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";
于 2013-09-21T06:05:57.447 回答
0

为了可读性,您可以包装条件

a.isActive() && b.isActive() 

在圆括号中()

(a.isActive() && b.isActive())

最后也不需要括号。所以你的最终条件应该是这样的:

(a.isActive() && b.isActive()) ? "Active" : "NotActive";

由于括号是可选的,因此条件可以重写为:

a.isActive() && b.isActive() ? "Active" : "NotActive";
于 2013-09-21T04:47:14.193 回答
0

看看条件运算符

   boolean isAActive = a.isActive();
   boolean isBActive = b.isActive();
   String AccessType = (isAActive && isBActive) ? "Active" : "NotActive";

代替

String AccessType = (a.isActive() && b.isActive() ? "Active" : "NotActive");

使用括号中的条件

于 2013-09-21T04:45:39.473 回答
0
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 会自动执行该操作

于 2013-09-21T05:50:21.737 回答