【发布时间】:2018-08-25 07:25:09
【问题描述】:
我一直在用java编写程序。如果我将一个整数分配给一个字节变量,它会正确编译如下:
byte test = 1;
但是,如果我将相同的整数传递给采用字节的方法参数,则会出现错误不兼容的类型:从 int 到字节的可能有损转换
double result = myClass.subtractNumbers(1,2,3);
public double subtractNumbers(byte 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;
}
}
【问题讨论】:
-
byte test = 1;是个例外。这是允许的,因为值 1 适合字节范围 -
@ernest_k 它是一个编译时常量表达式。
-
@AndyTurner 你能提供更多解释吗?或者指点我任何教程?我用谷歌搜索了这个错误,但没有得到太多帮助。
-
@Rumel 可以找到 in the language spec,“此外,如果表达式是 byte、short、char 或 int 类型的常量表达式(第 15.28 节):...”。这是一种不常见的事情(因为它只发生在编译时常量整数变量的赋值中),所以我可以想象很多教程都会跳过它。
-
@AndyTurner。感谢您为我提供教程。我正在读这个。
标签: java