Android DalvikVM-Bug?

spyboot

Bekanntes Mitglied
Entweder bin ich verrückt oder der Compiler/die VM baut Mist.
Ich gehe jetzt erstmal vom ersteren aus und frage euch:

Warum (in Gottes Namen) kriege ich hier zwei unterschiedliche Ergebnisse?

Version 1:
Java:
	public static byte fromHexToByte(byte hex1, byte hex2){
		return (byte) ((bytes[hex1-'0'] << 4) | bytes[hex2-'0']);
	}

	public static byte[] fromHexByteArrayToBytes(byte[] array, int max){
		byte[] bytes=new byte[max];
		for(int i=0;i<max;i++){
			int num = i * 2;
			bytes[i] = fromHexToByte(array[num], array[num+1]);
		}
		return bytes;
	}

Jetzt wollte ich die fromHexToByte Methode eliminieren und heraus kam das:

Version 2:
Java:
	public static byte[] fromHexByteArrayToBytes(byte[] array, int max){
		byte[] bytes=new byte[max];
		for(int i=0;i<max;i++){
			int num = i * 2;
			bytes[i] = (byte) ((bytes[array[num]-'0'] << 4) | bytes[array[num+1]-'0']);
		}
		return bytes;
	}

Mysteriöser Weise ist der Rückgabewert der zweiten Version vollkommen anders.
Ich bin für jede Hilfe und jede Idee dankbar.

spyboot
 

schlingel

Gesperrter Benutzer
Nein, das sind zwei verschiedene Scopes bzw. Gültigkeitsbereiche. Im zweiten Beispiel hast du eine lokale Variable die das Byte-Array hält und so im Zweifelsfall einer statischen Klassenvariable vorgezogen wird.

Das scheint im ersten Beispiel nicht der Fall zu sein weswegen die statische Klassenvariable bytes verwendet wird. Würde es diese Klassenvariable nicht geben, würde sich dein Code im ersten Beispiel nicht kompilieren lassen.
 

spyboot

Bekanntes Mitglied
Danke. Jetzt hab ich's gesehen... :oops:
Ich hohl dann mal den Schlaf nach den ich anscheinend dringend brauche.
(Verdammt -.- Soviel Zeit verschwendet...)
 

Neue Themen


Oben