1. ホーム
  2. java

[解決済み] Java 7以降、三項演算子は1つの式しか評価しない-Java 1.6以下では違っていた?

2022-10-20 09:41:26

質問

Oracle Certified Associate Java SE 8 Programmer 1 試験の準備中に、公式の Study Guide で 3 項式に関する次の段落を見つけました。

三項式の評価

Java 7では、三項演算子の右辺の式のうち1つだけが実行時に評価されます。短絡演算子と同様の方法で、三項演算子の2つの右辺の式のうち1つが副作用を実行する場合、実行時に適用されないことがあります。この原則を次の例で説明しよう。[...]

2つの式のうち1つだけが評価されると書いてありますが、次の例で実証してみましょう。

int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;

ここでは y が増加しますが z はインクリメントしません。

私がつまずいているのは、(黄色でマークされた) 段落の冒頭で、"Java 7 の時点で、..." と書かれている部分です。同じコードを Java 1.6 でテストしてみましたが、動作に違いは見当たりません。私は、パラグラフで与えられた情報だけで、Java 1.6が両方の式を評価することを期待しました。どなたか、"As of Java 7, ..."で何を言いたかったのかお分かりになりますか?

編集してください。 混乱を避けるために。Java 7の時点で」とありますが、Java 6からJava 7に移行する際に、三項演算子について何か変更があったのでしょうか?

どのように解決するのですか?

私はこれが出てきた本の著者の一人です。私はその特定の文章を書きませんでしたが、その意図が "これは Java 7" でテストされたものであることに同意します。私たちが別の版を書いたら、それを削除するようにメモしておきます。

明確には、三項演算子は Java 8、7、6 などで同じように動作してきました。そして、もし将来的に変わったとしたら、私はかなり驚きます。