"byte FOO = 0xFE;"
在Java中无法使用。
"Cannot convert from into to byte"
,但在C++中可以正常工作。如何解决?
数值0xFE
等同于int
中的254
,不在字节范围内,因此如果您尝试将其存储在字节中,则不会进行隐式类型转换。
您的RHS值必须在[-128至127]
范围内才能容纳在字节中。
或者,您可以通过显式类型转换
告诉编译器将其存储:
byte FOO = (byte)0xFE;
byte
范围内,则不需要进行显式类型转换。byte FOO = 0x20; // OK, can accommodate in byte.
请参阅JLS - 第5.1节以获取有关类型转换的更多详细信息。
还有JLS - 第5.2节,其中专门讨论赋值转换
引用自JLS
的一句话:-
如果变量的类型为byte、short或char,并且常量表达式的值可以表示为变量的类型,则可以使用缩小的原始类型转换。
Either:
long FOO = 0xFE; //Use long as type
byte FOO = (byte)0xFE; //Typecast to byte.