如果我有方法
void f(byte b);
如何在不进行强制转换的情况下使用数字参数调用它?
f(0);
给出错误。
答案 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