Ich habe eine Klasse mit javap
dekompilierten und ich habe einige Duplikate im Constant Pool Abschnitt, so zu sehen:Java-Klasse konstante Pool-Duplikate?
#19 = Class #350 // java/lang/StringBuilder
... Some other class constants here
#318 = Class #350 // java/lang/StringBuilder
Methodrefs nur einer von ihnen beziehen:
#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;
Ist diese Klasse korrekt nach The class File Format? Ich dachte, dass jede Klasse nur einmal erwähnt wird und später durch ihren Index im Bytecode-Teil referenziert wird.
$ javac -version
javac 1.7.0_15
Eine andere merkwürdige Sache ist in der Quelle der Klasse Pool.java den Constant Pool in Javac darstellt. Dies besagt, dass es kein Objekt in den Pool legt, wenn es bereits vorhanden ist (mit Hilfe einer HashMap). Ich frage mich, ob die equals()/hashCode() -Methoden dieser Klassen korrekt implemented sind.
Haben Sie das betrachten Fehler, den Sie verlinkt haben? Es wurde im Jahr 2008 gemeldet, und die letzte Aktivität war vor 2 Jahren. Wäre es tatsächlich kaputt, wäre es längst repariert worden. – cHao
Ich meinte nicht, wie alt es war. Ich bezog mich auf diesen Fehler und die Anerkennung davon. Ich wollte sagen, das ist in der Tat ein Fehler. –
Es ist eine Ineffizienz .... aber es ist nicht falsch. – cHao