"byte FOO = 0xFE;"
Java では動作しません。
"Cannot convert from into to byte"
しかし、それはC++で動作します。これを解決するには?
値はin0xFE
と同等であり、バイトの範囲内にないため、バイトに格納しようとしても、暗黙的な型キャストは行われません。バイト単位で対応するには、RHS値が範囲内にある必要があります。254
int
[-128 to 127]
または、コンパイラに明示的に保存するように指示することもできますexplicit typecasting
。
byte FOO = (byte)0xFE;
ただし、範囲に収まる値を格納する場合はbyte
、明示的な型キャストは必要ありません。
byte FOO = 0x20; // OK, can accommodate in byte.
型変換の詳細については、JLS-セクション#5.1を参照してください。
そしてJLS-具体的に議論するセクション#5.2Assignment Conversion
からのステートメントを引用するにはJLS
:-
変数の型がbyte、short、またはcharであり、定数式の値が変数の型で表現できる場合は、ナローイングプリミティブ変換を使用できます。
また:
long FOO = 0xFE; //Use long as type
また
byte FOO = (byte)0xFE; //Typecast to byte.
16進数を使用することにより、コンパイラーは、値がバイト[-128、127]の範囲内にあるかどうかを識別します。0xFE
がより大きいため、または127
を使用する必要があります。これは、の範囲外です。int
long
byte
あなたの例はナローイング変換と呼ばれています。