条件式が「真」の場合、「偽」の場合それぞれに実行される文が短い場合に用いられる演算子です。
演算子 |
意 味 |
使用法 |
? : |
「if〜else」文と同じ |
式1 ? 式2 : 式3
式1が真なら式2が実行される。
式1が偽なら式3が実行される。 |
したがって下の例は同じ働きをする。
if( a > 10 )
b = a;
else
b = -a;
|
b = a > 10 ? a : -a;
|
また、この演算子を入れ子にすることもできる。しかしこの演算子の入れ子は、後でバグが出たときに見直したり、共同開発している
他のプログラマーが見ると、とても見にくいので、入れ子にすることはあまりおすすめしない。
if( a > 10 ){
if( a > 100 )
b = 2;
else
b = 1;
}
else
b = 0;
|
b = a > 10 ? a > 100 ? 2 : 1 : 0;
|
この演算子の結果は最後に実行された式の値になる。したがって右側の2行目の文では、
a=1000のとき実行されるのは「2」となり、演算子の結果も「2」となる。それが変数bに
代入されるので、最終的には「b = 2」となる。
実はこの条件演算子は、C言語と若干仕様が異なります。C言語では、以下の三例はすべて同じです。
if( a > 10 )
b = a;
else
b = -a;
|
b = a > 10 ? a : -a;
|
a > 10 ? (b = a) : (b = -a);
|
しかし、一番右の例はJavaではコンパイルエラーになります。C言語では「?」と「:」の間に入るものは
式でも文でも良かったが、Javaでは式のみしか入れることができない。