したがって、ライン:
Short s = 'a'; // is valid ...
チャーが符号なし16ビットの値(最大値は65,536である)と短いあるので、16ビットの値(最大値は32,767である)で署名され、そのため、ボクシングの変換(ShortからShort)に続いて、狭い原始的な変換(short to char)があります。
short s = 'a'; // is valid - this is a narrowing primitive conversion (char -> short)
これらはspecial casesある:また
、発現は タイプバイト、短い、チャー、又はINTの定数式である場合:
- 狭義のプリミ 変数の型は変数の型で表現可能であるバイト、短い、又はチャー、及び定数 式の値である場合TIVE変換が使用されてもよいです。
バイト。
ショートと定数式の値が短い 型で表現可能です。
文字と定数式の値が タイプチャー表現可能です。
のは、次の例に行こう:
Integer ii = 'a'; // is invalid - not a special case according to Oracle docs
int i = 'a'; // is valid - widening primitive conversion (char -> int) is allowed
そして、あなたの質問から1以上の場合:
byte b;
final long L = 1;
b = L // error - incompatible types
ラインB = Lが無効であるのはなぜ?それは、上記の特別な場合ではないと私たちはキャスト時に情報が失われる可能性があるため、明示的にそれを実行しなければならない理由です:
また
b = (byte) L; // is valid - narrowing primitive conversion (long -> byte)
を、非常に参考にtableに顔をしています。
これらのルールに関する多くの情報がJLSドキュメントにあり、それらのすべてについて心配する必要はありません。私はあなたの最後の質問について何を言うことができ、暗黙の縮小変換することなく、リテラルの任意の整数は、次の例では、キャストが必要となることをされています。それに
// Cast is permitted, but not required - profit!
byte b = (byte) 100;
short s = (short) 100;
おかげで、我々はそれを変更することができます。
byte b = 100;
short s = 100;
ので、オートボクシング(およびプリミティブ拡大変換)は、 'char'を' Integer'にするためには機能しません。 'Integer ii =(int) 'a'を試してください。 ' –
iiはクラスのインスタンスですが、iは整数のデータ型のインスタンスです。 – Omore
javaの「Autoboxing and Unboxing」について学ぶ良い時間です。 https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – yogidilip