小编Nán*_*ser的帖子

Java类常量池重复?

我已经反编译了一个类,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()方法是否正确实现.

java javac

7
推荐指数
1
解决办法
813
查看次数

标签 统计

java ×1

javac ×1