3

"byte FOO = 0xFE;" 在java中不起作用。

"Cannot convert from into to byte"但它适用于 C++。如何解决这个问题?

4

2 回答 2

8

0xFE相当于254in 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,并且常量表达式的值可以用变量的类型表示,则可以使用窄化原语转换。

于 2012-10-27T07:00:32.877 回答
2

任何一个:

long FOO = 0xFE; //Use long as type

或者

byte FOO = (byte)0xFE; //Typecast to byte.

通过使用十六进制数,编译器将识别该值是否在字节 [-128, 127] 的范围内。因为,0xFE大于127, 你将不得不使用intorlong因为它超出了byte.

您的示例称为Narrowing conversion

于 2012-10-27T06:59:54.673 回答