我已经反编译了一个类,javap我在Constant Pool部分看到了一些重复,如下所示:
#19 = Class #350 // java/lang/StringBuilder
... Some other class constants here
#318 = Class #350 // java/lang/StringBuilder
Run Code Online (Sandbox Code Playgroud)
Methodrefs仅指其中一个:
#20 = Methodref #19.#351 // java/lang/StringBuilder."<init>":()V
#22 = Methodref #19.#353 // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
#24 = Methodref #19.#355 // java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
#25 = Methodref #19.#356 // java/lang/StringBuilder.toString:()Ljava/lang/String;
#110 = Methodref #19.#445 // java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
Run Code Online (Sandbox Code Playgroud)
根据类文件格式,这个类是否正确?我认为每个Class只提到一次,后面由字节码部分的索引引用.
$ javac -version
javac 1.7.0_15
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的事情是在javac Pool.java中代表常量池的类的源代码中.这表明它不会将对象放入池中(如果它已经存在)(借助HashMap).我想知道这些类的equals()/ hashCode()方法是否正确实现.