public static void main(String[] args) {
Object o=true?new Integer(1):new Double(1.0);
System.out.println(o);
}
出力として1.0を取得しています。最初に上記の else ステートメントに到達できませんが、どのように自動型キャストされますか。
public static void main(String[] args) {
Object o=true?new Integer(1):new Double(1.0);
System.out.println(o);
}
出力として1.0を取得しています。最初に上記の else ステートメントに到達できませんが、どのように自動型キャストされますか。
JLS は次のように述べています。
拡張プリミティブ変換 (§5.1.2) は、次の規則で指定されているように、一方または両方のオペランドを変換するために適用されます。
それは表現にある
true? Integer(1) : Double(1.0)
ここのオペランドの 1 つが Double であるため、戻り値の型も double です
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6
キーワードは「数値昇格」です。
数値昇格は、演算を実行できるように、数値演算子のオペランドを共通の型に変換するために使用されます。数値昇格には、単項数値昇格 (§5.6.1) と 2 進数値昇格 (§5.6.2) の 2 種類があります。
sᴜʀᴇsʜ ᴀᴛᴛᴀ は、具体的な例を説明するリンクを既に提供しています。