这种传递参数的方法与jvm有什么不同

vid*_*shi 1 java

当我们将123传递给显示方法时,为什么它给出错误,而使用变量by1传递相同的值被JVM接受.

什么与以下两个声明的差异1.serv.display(123); 2.serv.display(BY1);

public class Lab1 {

public static void main(String[] args) {
    MethodService serv=new MethodService();
    byte by1=123;
    serv.show(123);
    serv.show(by1);
    serv.display(123);
    serv.display(by1);
    }
}

class MethodService{
void show(int ab){
    System.out.println("---show(int)\t:"+ab);
}
void display(byte by1){
    System.out.println("display(byte)\t:"+by1);
}
}
Run Code Online (Sandbox Code Playgroud)

Jun*_*san 6

serv.display(123);
Run Code Online (Sandbox Code Playgroud)

将抛出一个错误,因为没有名称显示接受int值的方法.

serv.show使用both byteintinput 的原因是因为方法输入类型是int.这允许该方法接受可由编译器自动转换为int的输入类型.因此,任何占用较少内存位(32或更少)的数据类型(如byte(8位))都将自动转换为int值.

但是serv.display接受输入,byte这意味着该方法可以采用可以自动转换为字节的输入,即任何8位或更少的输入.当你传递int给它时,需要32位不能自动转换,因为它超出byte了位范围.因此编译器会抛出错误.