我有一些要编译的源代码文件。为此,我必须指定一个类路径,该路径包含(通过指定jar)所有使用过的具有正确签名的类和方法。
假设我有两个不同的类路径,它们都导致编译没有错误。这些类路径可能在jar的顺序,jar的版本(例如,较新版本的commons集合被较新的jar集合)或存在不必要的jar方面有所不同。
这些类路径如何影响字节码?我读到常量池的顺序对于不同的类路径可能会有所不同。还有其他可能的差异吗?
再说一次:我假设所有编译依赖都得到满足,但是可能使用了不同的jar。
最佳答案
您编译的类确实会影响您生成的字节码。我知道的领域受到影响:static
用于查找和调用静态方法的代码与用于常规(实例)方法的代码不同;如果使用库的不兼容版本运行代码,则可能会导致代码在运行时失败
常量:如果将许多常量(整数,字符串等)声明为static
和final
为static
块之外的常量,则编译器会内联;如果依赖库的不同版本为代码所引用的常量定义了不同的值或类型,则您的代码的字节码中将具有不同的值