如何在Java中指定字节文字?

时间:2011-03-04 12:45:24

标签: java byte literals

如果我有方法

void f(byte b);

如何在不进行强制转换的情况下使用数字参数调用它?

f(0);

给出错误。

6 个答案:

答案 0 :(得分:266)

你做不到。基本数字常量被视为整数(如果后跟“L”,则为long),因此必须将其明确地向下转换为一个字节以将其作为参数传递。据我所知,没有捷径。

答案 1 :(得分:109)

你必须施展,我害怕:

f((byte)0);

我相信它会在 compile -time而不是执行时执行适当的转换,所以它实际上不会导致性能损失。这很不方便:(

答案 2 :(得分:28)

您可以在Java中使用字节文字...排序。

    byte f = 0;
    f = 0xa;

0xa(int literal)自动转换为byte。它不是真正的字节文字(参见下面的JLS和评论),但是if it quacks like a duck, I call it a duck.

你不能做的是:

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

答案 3 :(得分:10)

如果你在代码中传递文字,是什么阻止你提前宣布它?

byte b = 0; //Set to desired value.
f(b);

答案 4 :(得分:5)

覆盖方法怎么样?
void f(int value)
{
  f((byte)value);
}

这将允许f(0)

答案 5 :(得分:-3)

使用Java 7及更高版本,您可以通过以下方式指定字节文字: byte aByte = (byte)0b00100001;

参考:http://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html