static void method(short x)
{
//do some stuff
}
Run Code Online (Sandbox Code Playgroud)
当我main使用以下行从方法调用上述方法时.
method(1); // compilation failed
Run Code Online (Sandbox Code Playgroud)
我知道上面的调用是无效的,因为参数'x'期望短,我们传递int.
我进一步测试了上述概念并编写了另一种方法:
static short method()
{
//do some stuff
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但上面的方法工作正常,返回类型很短,我们返回int.为什么第二种方法会编译?
Jon*_*eet 29
该return声明(JLS 14.17)能够使用赋值转换(JLS 5.2)从原来的表达式类型的返回类型转换.
赋值转换包括将常量表达式转换为较窄类型的能力(如果它在目标类型的范围内).因此int,short当值在范围内时,可以将类型的常量表达式转换为short.
方法参数不通过赋值转换 - 它们只使用方法调用转换(JLS 5.3),它不包括此常量转换.
就这种情况发生的原因而言- 我怀疑它只是让事情变得简单.赋值转换始终具有单个目标类型 - 而在方法参数的情况下,可能需要考虑各种不同的重载,因此必须有更多规则来确定常量表达式转换的具体方式.这只是一个猜测 - 显然可以做到.(例如,C#允许这样做.)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |