当前位置: 首页 > 知识库问答 >
问题:

不兼容类型:在将参数传递给函数时,从int到byte的转换可能有损

丁文轩
2023-03-14

public double subtractNumbers(字节a1,int a2,int a3)

我的问题是为什么编译器在第一种情况下不显示错误,而在第二种情况下显示错误?以下是完整的代码:

 public class MyClass {
        public static void main(String args[]) {
            MyClass myClass = new MyClass();
            byte test = 1; // this line does not show any errors
            double result = myClass.subtractNumbers(1,2,3);  // But this call shows error
            System.out.println("function result : " + result);
        }
        public double subtractNumbers(byte a1, int a2, int a3){
            double sum = a1 + a2 + a3;
            return sum;
        }
    }

共有1个答案

柳胜
2023-03-14

当您赋值一个数值文字时,该文字的值在编译时是已知的。如果该值在字节范围内,编译器允许该赋值。同样,这个语句也会给出编译错误。

byte test = 1000;

不兼容类型:从int到byte的转换可能有损

对于第二种情况,根据方法签名,方法采用类型的参数。Now方法不知道将用什么值调用它。因此,当您调用传递整数值的方法时,它不能保证值将位于字节范围内。所以编译器会直接抛出一个错误。

int a1 = 5; int a2 = 8; int a3 = 10;
subtractNumbers(a1, a2, a3); // this would have been OK
a1 = 1000;
subtractNumbers(a1, a2, a3); // this would not have been OK
 类似资料: