Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么方法调用给出错误?_Java_Int_Overloading_Short - Fatal编程技术网

Java 为什么方法调用给出错误?

Java 为什么方法调用给出错误?,java,int,overloading,short,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); } } 我得到的错误是mshort不适用于mint,但当我 将int值赋给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);
}

}
我得到的错误是mshort不适用于mint,但当我 将int值赋给short则无错误,如果我无法传递int 值作为接受short的方法的参数,那么变量接受int值的长度如何,如下所示

short d=10;
System.out.println(d);
您必须将int转换为short,因为10被认为是int而不是short:

ml.m((short)10);

强制转换10,因为没有与之关联的类型Java假定它是32位int,而不是16位的short-to-short

与传递给方法的文本不同,赋值中可能会发生窄化转换。从

如果变量的类型是byte、short或char,并且常量表达式的值可以在变量的类型中表示,则可以使用窄化原语转换


这是静态绑定,赋值运算符“=”对向下转换不严格。但方法绑定对类型严格。假设您还有一个方法void mint i和void mint i,方法绑定器必须将调用绑定到正确的方法。所以一定要严格

在short s=10的情况下,jdk将在编译时向下转换该值,因此该值将被分配给s,将向下转换为short 10,同样,如果您尝试分配一个实际的int范围值,比如9999999,它将不会编译

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

m1.m((short) 10);