Cha*_*bel 222 java byte literals
如果我有方法
void f(byte b);
Run Code Online (Sandbox Code Playgroud)
如何在不进行强制转换的情况下使用数字参数调用它?
f(0);
Run Code Online (Sandbox Code Playgroud)
给出错误.
Rob*_*bin 274
你不能.基本数字常量被视为整数(如果后跟"L",则为long),因此必须将其明确地向下转换为一个字节以将其作为参数传递.据我所知,没有捷径.
Jon*_*eet 114
你必须施展,我害怕:
f((byte)0);
Run Code Online (Sandbox Code Playgroud)
我相信它会在编译时执行适当的转换而不是执行时间,所以它实际上不会导致性能损失.这只是不方便:(
Ric*_*igh 28
您可以在Java中使用字节文字...排序.
byte f = 0;
f = 0xa;
Run Code Online (Sandbox Code Playgroud)
0xa
(int literal)自动转换为byte.这不是一个真正的字节文字(参见下面的JLS和评论),但如果它像鸭子一样嘎嘎叫,我称它为鸭子.
你不能做的是:
void foo(byte a) {
...
}
foo( 0xa ); // will not compile
Run Code Online (Sandbox Code Playgroud)
您必须按如下方式进行投射:
foo( (byte) 0xa );
Run Code Online (Sandbox Code Playgroud)
但请记住,这些都将编译,并且他们正在使用"字节文字":
void foo(byte a) {
...
}
byte f = 0;
foo( f = 0xa ); //compiles
foo( f = 'a' ); //compiles
foo( f = 1 ); //compiles
Run Code Online (Sandbox Code Playgroud)
当然这也是编译的
foo( (byte) 1 ); //compiles
Run Code Online (Sandbox Code Playgroud)
Mik*_*key 11
如果你在代码中传递文字,那么是什么阻止你提前宣布呢?
byte b = 0; //Set to desired value.
f(b);
Run Code Online (Sandbox Code Playgroud)
怎样用
void f(int value)
{
f((byte)value);
}
Run Code Online (Sandbox Code Playgroud)
这将允许 f(0)
归档时间: |
|
查看次数: |
138125 次 |
最近记录: |