我们在 Linux 和 Windows 上使用相同的 1.6.0_25 版本进行 Java 编译。
由于某种原因,生成的类文件是不同的。这是对的吗?
我们在 Linux 和 Windows 上使用相同的 1.6.0_25 版本进行 Java 编译。
由于某种原因,生成的类文件是不同的。这是对的吗?
java编译器不是确定性的,如果在同一平台上多次编译或在不同平台上编译,可能不会生成相同的.class。我试图弄清楚java编译器的内部结构,看看为什么它不是确定性的。
在了解javac中的交叉编译选项时,进一步搜索它可以提供更多见解:
交叉编译选项
默认情况下,类是针对 javac 附带的平台的引导类和扩展类编译的。但是 javac 也支持交叉编译,其中类是针对不同 Java 平台实现的引导程序和扩展类进行编译的。交叉编译时使用 -bootclasspath 和 -extdirs 很重要;请参阅下面的交叉编译示例。
Java 字节码与平台无关。