java - 作为字节变量/参数的整数文字 : when exactly does the compiler complain?

标签 java java-7 javac

在下面的代码中:

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 做了一些叫做方法调用转换的事情——它明确要求程序员指定一个收缩转换。

This link might help.

关于java - 作为字节变量/参数的整数文字 : when exactly does the compiler complain?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835786/

相关文章:

java - 为什么 javac 提示与类的类型参数无关的泛型?

java - 在 Java Swing 中显示 Windows 资源管理器类型的文件结构的最简单方法是什么?

java - 将 JSON 映射到 Java 对象

java - 如何访问 Java 7 java.nio.file.Path 中的子文件/文件夹?

java - String.format() 抛出 FormatFlagsConversionMismatchException

java - OpenMPI:包 mpi 不存在

java - 如何将每个循环的 Java 减半?

java - 尝试注入(inject)两个具有通用实现的存储库失败

Java7 : Detect all files when creating a new non-empty directory

java - JLS 6/7 的哪些更改导致以下带有集合和泛型的未经检查的代码在 Java 7 中工作?