为什么方法调用会出错?

时间:2017-06-06 09:51:28

标签: java int overloading short

当我编写此代码时,我收到错误

public class MethodOverloading 
{

void m(short i)
{
System.out.println("SHort");
}

public static void main(String[] args) 
{

MethodOverloading ml=new MethodOverloading();
ml.m(10);
}

}

我收到的错误是m(短)不适用于m(int),但是当我的时候 如果无法传递int,则将int值赋值为short然后没有错误 value作为接受short的方法的参数,然后short变量接受int值如下所示?

short d=10;
System.out.println(d);

4 个答案:

答案 0 :(得分:3)

与文件传递给方法不同,在赋值中可以进行缩小转换。来自JLS

  

如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。

答案 1 :(得分:0)

你必须将int强制转换为short,因为10被视为int而不是短篇:

ml.m((short)10);

答案 2 :(得分:0)

m1.m((short) 10);

将10(因为没有与之关联的类型,Java假设它是32位int而不是16位short)转换为short。

答案 3 :(得分:0)

这是静态绑定,赋值运算符'='对于向下转换不严格。但是方法绑定对类型是严格的。想象一下,你有另外一个方法void m(int i)和void m(int i)方法绑定器必须将调用绑定到正确的方法。所以必须严格。

简而言之,s = 10的情况下,jdk会在编译时向下转换值,所以将分配给s的值将是10的短等级,如果你尝试分配一个真正的int范围值,说99999999它不会编译。

最后,静态方法绑定对类型是严格的。