B
Bmeise
Gast
Moin,
Ich hab hier eine Funktion welche 2 Arrays entgegen nimmt und den einen, auf den andern kopieren soll. Dabei kann es vorkommen das einer größer ist als der andere, sodass ich mir dachte: Erstellste nen neuen array mit passender größe, kopierst dann, alles super.
Blöde erklärung, mal ein Minimalbeispiel der Funktion:
Der trugschluss bei Java ist ja das Objekte als Referenzu übergeben werden. Stattdessen wird die Referenz als Call by Value übergeben, und so durch arr1=new byte[arr2.length] versaut. Denn dort wird ja nicht das Objekt verändert, dessen übergebene Referenz auf das gleich Objekt zeigt welches von der Aufrufenden Klasse kommt, sondern die Referenz auf ein neues Objekt umgebogen. Und da die Referenz als Call by Value übergeben wurde, bekommt die aufrufende Klasse das nicht mit. Hoffe das war verständlich
Vermutlich gibt es ne Super einfache lösung (Im Grunde möcht ich nur den einen Array auf den andern kopieren und muss dabei explizit auf die Größe achten), nur ich steh voll auf'm Schlauch.
Achja: Als Rückgabewert o.ä. geht nicht, das dort is ein Minimalbeispiel. Im vorliegenden Szenario passiert da mehr, ist komplexer usw., und es werden schon andere Dinge zurückgegeben. Auch eine Anpassung der Größe der Arrays durch die Aufrufende Klasse wäre denkbar, da dies aber von vielen (sau vielen) versch. Klassen benutzt wird später, und aus allen Ecken aufgerufen wird wäre das unschön alles zu ändern.
Ich hab hier eine Funktion welche 2 Arrays entgegen nimmt und den einen, auf den andern kopieren soll. Dabei kann es vorkommen das einer größer ist als der andere, sodass ich mir dachte: Erstellste nen neuen array mit passender größe, kopierst dann, alles super.
Blöde erklärung, mal ein Minimalbeispiel der Funktion:
Java:
public void Method(byte[] arr1,byte[] arr2){
if(arr1.length<arr2.length){
arr1=new byte[arr2.length]
{
System.arraycopy(arr2,0,arr1,0,arr2.length)
}
Der trugschluss bei Java ist ja das Objekte als Referenzu übergeben werden. Stattdessen wird die Referenz als Call by Value übergeben, und so durch arr1=new byte[arr2.length] versaut. Denn dort wird ja nicht das Objekt verändert, dessen übergebene Referenz auf das gleich Objekt zeigt welches von der Aufrufenden Klasse kommt, sondern die Referenz auf ein neues Objekt umgebogen. Und da die Referenz als Call by Value übergeben wurde, bekommt die aufrufende Klasse das nicht mit. Hoffe das war verständlich
Vermutlich gibt es ne Super einfache lösung (Im Grunde möcht ich nur den einen Array auf den andern kopieren und muss dabei explizit auf die Größe achten), nur ich steh voll auf'm Schlauch.
Achja: Als Rückgabewert o.ä. geht nicht, das dort is ein Minimalbeispiel. Im vorliegenden Szenario passiert da mehr, ist komplexer usw., und es werden schon andere Dinge zurückgegeben. Auch eine Anpassung der Größe der Arrays durch die Aufrufende Klasse wäre denkbar, da dies aber von vielen (sau vielen) versch. Klassen benutzt wird später, und aus allen Ecken aufgerufen wird wäre das unschön alles zu ändern.