1
byte b = 0xFFFFFFFF; //OK, because integer -1 sits between -128 and 127, FINE!!
char ch = 0xFFFFFFFF; //Not OK, because integer -1 does not sit between 0 and 65535, FINE!!
byte b = 0L; //Compiler says Not OK? But long integer 0 sits between -128 and 127?

上記のコードの 3 行目で Java コンパイラによって適用される縮小規則には納得できません。

この絞り込みルールの背後にあるロジックを理解するのを手伝ってください。

4

2 に答える 2

0

プリミティブ データ型を別のデータ型にキャストするには、2 つの方法があります。明示的および暗黙的。

あなたの場合のように暗黙的なキャストを行うとbyte b = 0L;、情報が失われる可能性があるため、コンパイル エラーが発生します。

次のように変更すると:

byte b=(byte)0L;

その後、コンパイラに変換を明示的に伝えているため、コンパイラエラーは発生しません。

于 2015-06-11T07:26:38.887 に答える