gpt4 book ai didi

Java类常量池重复?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:04 28 4
gpt4 key购买 nike

我用 javap 反编译了一个类,我在常量池部分看到了一些重复项,如下所示:

 #19 = Class              #350          //  java/lang/StringBuilder
... Some other class constants here
#318 = Class #350 // java/lang/StringBuilder

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;

根据The class File Format,这个类是否正确? ?我认为每个类只被提及一次,稍后在字节码部分通过它的索引引用。

$ javac -version
javac 1.7.0_15

另一个奇怪的事情是javac中表示常量池的类的源码Pool.java .这表明如果对象已经存在(在 HashMap 的帮助下),它不会将对象放入池中。我想知道这些类的 equals()/hashCode() 方法是否正确实现。

最佳答案

正如我从 JVM 规范中了解到的那样,没有这样的限制可以防止常量池中的重复条目。一般生成class文件的编译器是没有重复项的。但即使类文件有重复项,也不应影响其预期行为。

您反编译的类文件是如何创建的?

关于Java类常量池重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16687334/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com