"byte FOO = 0xFE;"
在java中不起作用。
"Cannot convert from into to byte"
但它适用于C ++。
怎么解决这个问题?
答案 0 :(得分:8)
值0xFE
相当于254
中的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 - Section # 5.2专门讨论了Assignment Conversion
引用JLS
的陈述: -
如果类型为,则可以使用缩小的基元转换 变量是byte,short或char,以及常量的值 表达式可以在变量的类型中表示。
答案 1 :(得分:2)
或者:
long FOO = 0xFE; //Use long as type
或
byte FOO = (byte)0xFE; //Typecast to byte.
通过使用十六进制数,编译器将识别该值是否适合字节范围[-128,127]。由于0xFE
大于127
,您必须使用int
或long
,因为它超出了byte
的范围。
您的示例名为Narrowing conversion。