"byte FOO = 0xFE;"
在java中不起作用。
"Cannot convert from into to byte"
但它适用于 C++。如何解决这个问题?
值0xFE
相当于254
in int
,并且不在字节范围内,因此如果您尝试将其存储在字节中,则不会进行隐式类型转换。您的 RHS 值必须在范围内[-128 to 127]
才能以字节为单位。
或者,您可以通过以下方式明确告诉编译器存储它explicit typecasting
:
byte FOO = (byte)0xFE;
但是,如果您存储一个可以适合范围的值,byte
则不需要显式类型转换。
byte FOO = 0x20; // OK, can accommodate in byte.
有关类型转换的更多详细信息,请参阅JLS - Section # 5.1。
和JLS - 第 5.2 节专门讨论Assignment Conversion
引用以下声明JLS
:-
如果变量的类型是 byte、short 或 char,并且常量表达式的值可以用变量的类型表示,则可以使用窄化原语转换。
任何一个:
long FOO = 0xFE; //Use long as type
或者
byte FOO = (byte)0xFE; //Typecast to byte.
通过使用十六进制数,编译器将识别该值是否在字节 [-128, 127] 的范围内。因为,0xFE
大于127
, 你将不得不使用int
orlong
因为它超出了byte
.
您的示例称为Narrowing conversion。