2017-06-06 28 views
-1

当我写这个代码我收到错误为什么方法调用给出错误?

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(INT),但是当我 分配int值短则没有错误,则如果我不能将int 值作为参数传递给接受short的方法,那么short变量如何接受int值如下所示?

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

回答

0

你要投的intshort,因为10被认为是像int不是一个短期:铸铁

ml.m((short)10); 
0
m1.m((short) 10); 

10(因为没有与它相关类型的Java假定它是一个32位整数而不是16位短)。

3

缩小转换可以发生在一个赋值中,而不是传递给方法的文字。从JLS

如果变量的类型是字节,短,或炭和常量表达式的值在变量的类型可表示可使用基本收缩转换。

0

这是静态绑定,并且赋值运算符'='在向下投射时不严格,但方法联编程序对类型是严格的。试想一下,你还有一个方法void m(int i)和void m(int i),方法联编程序必须将调用绑定到正确的方法。所以它一定是严格的。

简而言之,s = 10的情况下,jdk会降低编译时的值,所以这个值将被分配给s将会缩短10的等级,同样如果你试图分配一个真实的int范围值,比如99999999,它会不编译。

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

相关问题