在静态函数中返回值 - Java

Edi*_*jam 5 java

我有两个功能.一个工作正常,而另一个不编译.无法发现原因.你能帮帮我吗?

这很好用

 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)