当我编写此代码时,我收到错误
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);
答案 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它不会编译。
最后,静态方法绑定对类型是严格的。