【发布时间】:2012-10-01 11:16:44
【问题描述】:
谁能解释相同的 Java 源代码如何最终编译为 二进制 不同的类文件?
问题源于以下情况:
我们有一个相当大的应用程序(800 多个类),它已经被分支、重组然后重新集成回主干。在重新整合之前,我们将主干合并到分支中,这是标准程序。
最终结果是一组带有分支源的目录和一组带有主干源的目录。使用 Beyond Compare,我们能够确定两组来源是相同的。然而,在编译(相同的 JDK 使用 IntelliJ v11 中托管的 maven)时,我们注意到大约有十几个类文件是不同的。
当我们反编译每对明显不同的类文件的源代码时,我们最终得到了相同的 java 源代码,所以就最终结果而言,这似乎并不重要。但是为什么只有几个文件不同呢?
谢谢。
补充一点:
如果 maven/javac 以不同的顺序编译文件,会不会影响最终结果?
【问题讨论】:
-
不同的jdk版本?我想不同版本的优化可能会有所不同。
-
使用 javap -c -v(感谢 Peter Lawrey)并使用 Beyond Compare(很棒的工具,喜欢它!)查看各自的输出,我可以确认 Stephen C(感谢 Stephen C)响应中的第 5 项在这里给出部分答案。在某些情况下,常量池的顺序是不同的。但是,我很确定两者的类路径相同,但编译顺序可能不同。
标签: java compilation