我有两个功能.一个工作正常,而另一个不编译.无法发现原因.你能帮帮我吗?
这很好用
static byte method1() {
final short sh1 = 2;
return sh1;
}
Run Code Online (Sandbox Code Playgroud)
这个不编译
static byte method2(final short sh2) {
return sh2;
}
Run Code Online (Sandbox Code Playgroud)
fge*_*fge 11
在你的第一个例子中,sh1是final,并且有一个值可以在编译时确定为"阉割"到a byte.实际上,这是一个常数.如果你删除final它,它将不再编译.
在你的第二个例子中,编译器无法确定你的方法参数是"安全的",你必须做一个显式的强制转换,就像其他提到的答案一样.
有关详细信息,请参阅此处(JLS参考资料和所有内容).但一个简单的例子:
final byte b1 = 127;
final byte b2 = 1;
final byte b = b1 + b2; // <-- FAIL: 128 greater than Byte.MAX_VALUE
final byte b1 = 12;
final byte b2 = 3;
final byte b = b1 + b2; // <-- SUCCESS: 15 fits
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |