2

Java の三項演算子に関するいくつかの疑問を解消したいと思います。

Java では、x = (c ? a : b) のようになります。私が読んで経験したことから、分岐 if/else として実行されるようです。つまり、1 つのステートメントのみが評価されます (a または b のいずれかであり、両方ではありません)。それが常に真実かどうか知りたいです。

C では、式 a と b の両方を評価する条件付き移動にコンパイルされる場合があります。

正確には、Android コードにも当てはまるかどうかを知りたいです。最近の OS を搭載したデバイスにインストールすると、Java バイトコードが実際にネイティブの命令に変換されることがわかっている ( Android ランタイム (ART)を参照)。ART の後に条件付きの動きが現れるリスクはありますか?

例を見てみましょう。以下を含む基本クラス:

//class content

int victoriesA = 0;
int nonVictoriesA = 0;
int totalCalls = 0;

//...class content

public int getIncrementedCounter(int goalsA,int goalsB){
    totalCalls++;
    return (goalsA > goalsB ? ++victoriesA : ++nonVictoriesA);
}

public boolean testOpertor(){
    return (totalCalls == victoriesA + nonVictoriesA);
}

プログラムの実行中にgetIncrementedCounterが複数回呼び出された場合、関数testOperatorは常に true を返しますか? (コードが単一のスレッドで実行されると仮定)

問題を確実に回避するために if/else ブランチを使用する必要があることはわかっていますが、それでも疑問に思います....

4

1 に答える 1