通常、割り当てに複数の(暗黙の)変換を適用することはできません(JLS§5.2割り当て変換):
代入変換は、式の値が変数に割り当てられたときに発生します(§15.26)。式の型を変数の型に変換する必要があります。割り当てコンテキストでは、次のいずれかを使用できます。
- ID変換(§5.1.1)
- 拡大するプリミティブ変換(§5.1.2)
- 拡大参照変換(§5.1.5)
- ボクシングの変換(§5.1.7)とそれに続く拡張参照変換
- 開開変換(§5.1.8)の後に、オプションで拡張プリミティブ変換が続きます。
Long l=250;
2つの変換(プリミティブ変換の拡大とそれに続くボクシング変換)が必要なため、コンパイルされません。
Long l=250l;
単一のボクシング変換が必要なため、コンパイルします。
ただし、定数式の変換を絞り込むことは特殊なケースであるため、Short s=250;
コンパイルは次のようになります。
さらに、式がbyte、short、char、またはint型の定数式(§15.28)の場合:
- 変数の型がbyte、short、またはcharであり、定数式の値が変数の型で表現できる場合は、ナローイングプリミティブ変換を使用できます。
- 変数のタイプが次の場合は、ナローイングプリミティブ変換とそれに続くボクシング変換を使用できます。
- バイトと定数式の値は、バイト型で表すことができます。
- Shortであり、定数式の値はshort型で表すことができます。
- 文字と定数式の値は、char型で表すことができます。