你如何在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