在下面的代码中:
public class FooMain {
private static void foo(byte b) {}
public static void main(String args[]) throws Exception {
byte b1 = 0; // javac doesn't complain
byte b2 = 127+30000-30000; // javac apparently does arithmetic and doesn't complain
foo(0); // javac complains here and requires a cast to (byte). Why?
}
}
为什么 javac
编译器会提示对 foo
的调用,而它显然能够推断出所提供的文字甚至文字算术表达式可以安全地分配给byte
变量?我正在使用 Oracle javac 1.7.0_60。
最佳答案
Java 在前两个地方使用了一种称为赋值转换的东西,隐式缩小数据类型是合法的。
但是在第三种情况下,Java 做了一些叫做方法调用转换的事情——它明确要求程序员指定一个收缩转换。
关于java - 作为字节变量/参数的整数文字 : when exactly does the compiler complain?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835786/