0

以下に示すように、条件演算子を使用していました..

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

ここで、a.active が true で b.active も true の場合、結果は Active になるはずですが、最初に a.active が失敗した場合、npo は b.isactive をテストする必要があるだけで、アクティブではありません。正しいかどうか。

4

4 に答える 4

3

あなたの実装はすでに正しいです。「怠惰」な側面 ( true を返すb.isActive()場合にのみ呼び出す) は、ショートサーキットであるオペレーターの動作によって処理されます。a.isActive()&&

JLS のセクション 15.23から:

条件付き AND 演算子 && は & (§15.22.2) に似ていますが、左側のオペランドの値が true の場合にのみ右側のオペランドを評価します。

これを条件演算子の条件 (第 1 オペランド) として使用しているという事実は関係ありません。したがって、コードは次と同等です。

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

ただし、コードに2つの変更を加えます。

  • ブラケットは使いません。それらは不要です。メソッドを呼び出しているのではなく、単なる条件演算子です。
  • 変数の名前を に変更しますaccessTypecamelCase変数に使用する Java 命名規則。

そう:

String accessType = a.isActive() && b.isActive() ? "Active" : "NotActive";
于 2013-09-21T06:05:57.447 に答える
0
1. Now I want that if a.active is true and b.active is also true then
    the result should be Active

boolean status = a.isActive() && b.isActive();
文字列値 = ステータス ? "アクティブ" : "非アクティブ";

2. if initially a.active fails then no need to test b.isactive

Java はShort circuit Evaluationに従うので、Java が自動的に実行することを気にする必要はありません。

于 2013-09-21T05:50:21.737 に答える
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

読みやすくするために、条件をラップすることができます

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 に答える