为什么在一个应该返回简短工作的方法中返回一个int?

时间:2013-05-27 09:04:02

标签: java

static void method(short x)
{
   //do some stuff
}

当我使用以下行从main方法调用上述方法时。

method(1); // compilation failed

我知道上面的调用是无效的,因为参数'x'期望短,我们传递int。

我进一步测试了上述概念并编写了另一种方法:

static short method()
{
    //do some stuff
    return 1;    
}

但上面的方法工作正常,返回类型很短,我们返回int。 为什么第二种方法会编译?

3 个答案:

答案 0 :(得分:29)

return statement (JLS 14.17)能够使用assignment conversion (JLS 5.2)从原始表达式转换为返回类型。

分配转换包括将常量表达式转换为较窄类型的能力(如果它在目标类型的范围内)。因此,当值在int范围内时,short类型的常量表达式可以转换为short

方法参数不会进行赋值转换 - 它们只使用包含此常量转换的方法invocation conversion (JLS 5.3)

为何这种情况而言 - 我怀疑它只是让事情更简单。赋值转换始终具有单个目标类型 - 而在方法参数的情况下,可能存在各种不同的重载需要考虑,因此必须有更多规则来确定常量表达式转换的具体方式将会。这只是一个猜测 - 它显然可以完成。 (例如,C#允许这样做。)

答案 1 :(得分:3)

你的价值恰好适合做空。尝试返回不适合16位的内容,例如大于32767的整数值,您将收到编译时错误。

答案 2 :(得分:0)

-32,768 范围内的任何数字和最大 32,767

不应存在任何问题

实际上,您可以使用short来节省大型数组中的内存 节省内存实际上很重要。

相比之下,int数据类型是32位带符号的二进制补码整数。它的最小值 -2,147,483,648 ,最大值 2,147,483,647 。对于整数值,除非有(即存储器节省)的原因选择其他内容,否则此数据类型通常是默认选择。此数据类型很可能足以支持您的程序使用的数字,但如果您需要更广泛的值,请改用long