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);