このコードスニペットについて考えてみましょう。
public static void main(String[] args) {
int z1 = 0;
final int z2 = 0;
System.out.println(false ? z1 : 'X');
System.out.println(false ? z2 : 'X');
}
このコードを実行するとX
、コンソールに2つ表示されると思います。ただし、実際の出力は次のとおりです。
88
X
三項演算子に関するJavaの仕様を見ると、次のことがわかりました。
オペランドの1つがT型であり、Tがbyte、short、またはcharであり、もう1つのオペランドがint型の定数式であり、その値がT型で表現可能である場合、条件式の型はTです。
したがって、最初の出力では'X'
charがと見なされるためint
、が出力されます88
。
final
ただし、を使用すると2番目の出力の動作が変わる理由がわかりません。