2016-07-26 20 views
1

Ich benutze einen Java Decompiler und es scheint einen vernünftigen Code zu geben, außer dass es seltsame Symbole für konstante ganze Zahlen gibt. Beispiel:Java Decompiler gibt seltsame Symbole

#int[] arr = new int['田']; 

Dieses Symbol hat einen numerischen Wert in U + 7530. Ich frage mich, ob es funktioniert, dieses Symbol auf seinen numerischen Wert zurückzusetzen oder ich kann mich nicht auf diesen Mechanismus verlassen?

Mein Problem ist, dass dieser Code eine Array-Out-of-Bound-Ausnahme gibt, so dass die Größe der Arrays sehr wichtig ist.

+0

Sie haben Ihr Betriebssystem nicht angegeben. Eine Vermutung ist, dass das Betriebssystem-Gebietsschema auf eins eingestellt ist, das vollständigen Unicode benötigt. Wenn dies der Fall ist, kann die Einstellung auf US oder eine andere englischsprachige Konstante dazu führen, dass Konstanten in Ganzzahlen und nicht in Unicode-Zeichen aufgelöst werden. – Gene

+1

Beachten Sie, dass '(int) '田' == 30000'; Da Array-Indizes immer ganze Zahlen sind, macht es keinen Unterschied, ob Sie ''田' 'oder' 30000' verwenden. –

+0

Danke. Jetzt macht es Sinn. –

Antwort

0

Auf Bytecodeebene unterscheiden lokale Variablen nicht zwischen Booleschen Werten, Bytes, Zeichen, Kurzschlüssen und Ints. Alles wird nur unter der Haube zu Ints kompiliert, mit Kürzungsinstruktionen eingefügt, wo passend.

Dies bedeutet, dass der Decompiler willkürlich entscheiden muss, auf welchen Typ er dekompiliert werden soll (vorausgesetzt, es gibt keine Debug-Metadaten). Es sieht so aus, als ob Ihr Decompiler entschieden hat, die Integer-Konstante stattdessen in eine Zeichenkonstante zu dekompilieren.