【问题标题】:Why method call is giving error?为什么方法调用会出错?
【发布时间】:2017-06-06 09:51:28
【问题描述】:

当我写这段代码时,我得到了错误

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(short) 不适用于 m(int) 但是当我 将int值分配给short然后没有错误然后如果我不能通过int value 作为接受 short 的方法的参数,那么 short 变量如何接受 int 值,如下所示?

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

【问题讨论】:

    标签: java int overloading short


    【解决方案1】:

    与传递给方法的文字不同,在赋值中可能会发生缩小转换。来自JLS

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

    【讨论】:

      【解决方案2】:

      您必须将 int 转换为 short,因为 10 被认为是一个 int 而不是短:

      ml.m((short)10);
      

      【讨论】:

        【解决方案3】:
        m1.m((short) 10);
        

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

        【讨论】:

          【解决方案4】:

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

          在 short s = 10 的情况下,jdk 将在编译时向下转换该值,因此分配给 s 的值将是 short 10 的向下种姓,如果您尝试分配一个真正的 int 范围值,例如 99999999,它不会编译。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-26
            • 2017-10-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-02
            相关资源
            最近更新 更多