你如何在Java中指定一个字节文字?
如果我有一个方法
void f(byte b);
我怎么能调用它的数值参数而不铸造?
f(0);
给出一个错误。
你不能。 一个基本的数字常量被认为是一个整数(或者如果后面跟着一个“L”),所以你必须明确地向下转换成一个字节来传递它作为参数。 据我所知,没有捷径。
你必须投,我害怕:
f((byte)0);
我相信会在编译时执行适当的转换,而不是执行时间,所以实际上并不会导致性能损失。 这只是不方便:(
你可以在Java中使用一个字节字面值…。
byte f = 0; f = 0xa;
0xa
(int literal)被自动转换为字节。 这不是一个真正的字节文字(见JLS和下面的评论),但如果它像一只鸭子呱呱叫,我把它叫做鸭子。
你不能做的是这样的:
void foo(byte a) { ... } foo( 0xa ); // will not compile
你必须投下如下:
foo( (byte) 0xa );
但请记住,这些都将被编译,并且正在使用“字节文字”:
void foo(byte a) { ... } byte f = 0; foo( f = 0xa ); //compiles foo( f = 'a' ); //compiles foo( f = 1 ); //compiles
当然这也编译
foo( (byte) 1 ); //compiles
如果你在代码中传递文字,什么阻止你提前声明它?
byte b = 0; //Set to desired value. f(b);
怎么样覆盖方法
void f(int value) { f((byte)value); }
这将允许f(0)
对于Java 7及更高版本,您可以通过以下方式指定字节文本: byte aByte = (byte)0b00100001;
参考: http : //docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html