Hallo,
Ich bin heute bei dem Erstellen eines Paketes für untersch. Sortierungsalgorythmen auf ein für mich merkwüdiges Problem gestoßen und habe nun ein stark vereinfachtes Programmbeispiel geschrieben:
Es gibt zwei Pakete: ein Paket "frontend" und ein Paket "objekte"
Hier zunächst das Paket "objekte":
Klasse Bauplan (eine Abstrakte Klasse, von der andere Objekte erben sollen)
Klasse Variante1 (erbt von Bauplan)
Klasse Variante2
Nun mein Package "frontend"
Klasse Frontend
Mein Problem besteht nun, wie ich in den Comments schon versucht habe zu verdeutlichen, darin, dass v2.meinInt[] offensichtlich nicht nur eine Kopie von v1.meinInt[] erhält, sondern auf den gleichen Speicher zeigt, sodass sich beide Werte ändern, sobald nur einer von ihnen geändert wird.
Genau das möchte ich vermeiden. v2.meinInt[] soll zwar eine Kopie von v1.meinInt[] erhalten, jedoch sollen danach beide Arrays vollkommen unabhängig voneinander sein.
Woran liegt es / was kann ich machen?
Vielen Dank für eure Hilfe!
Philipp
Ich bin heute bei dem Erstellen eines Paketes für untersch. Sortierungsalgorythmen auf ein für mich merkwüdiges Problem gestoßen und habe nun ein stark vereinfachtes Programmbeispiel geschrieben:
Es gibt zwei Pakete: ein Paket "frontend" und ein Paket "objekte"
Hier zunächst das Paket "objekte":
Klasse Bauplan (eine Abstrakte Klasse, von der andere Objekte erben sollen)
Code:
package objekte;
public abstract class Bauplan {
protected int meinInt[] = null;
public void setzeInt(int[] i){
meinInt = i;
}
public int[] gibInt() {
return meinInt;
}
public int gibersteInt() {
return meinInt[0];
}
}
Klasse Variante1 (erbt von Bauplan)
Code:
package objekte;
public class Variante1 extends Bauplan {
public Variante1() {
super();
}
public void erhöheInt() {
meinInt[0]++;
}
}
Klasse Variante2
Code:
package objekte;
public class Variante2 extends Bauplan {
public Variante2() {
super();
}
}
Nun mein Package "frontend"
Klasse Frontend
Code:
package frontend;
import objekte.Variante1;
import objekte.Variante2;
public class FrontEnd {
Variante1 v1 = null; // Die Objekte v1 und v2 werden deklariert
Variante2 v2 = null; // ....
public FrontEnd() { // Konstruktur des "Frontends"
v1 = new Variante1(); // Es wird ein Objekt vom Typ Variante 1
v2 = new Variante2(); // und eines vom Typ Variante 2 erzeugt.
int[] meinArray = {1,2,3,4}; // Es wird ein Array initialisiert, für uns ist eigentlich nur der Wert meinArray[0] wichtig.
v1.setzeInt(meinArray); // Das Objekt vom Typ Variante 1 bekommt meinArray übergeben. Dies wird für v1.meinInt[] gesetzt.
v2.setzeInt(v1.gibInt()); // HIER ist der Knackpunkt: v2.meinInt[] soll die gleichen Werte wie v1.meinInt[] annehmen. Jedohc soll es eine individuell veränderbare Kopie erhalten!
System.out.println("v1.meinInt = " + v1.gibersteInt() + ", v2.meinInt = " + v2.gibersteInt()); // Testausgabe - hier eigentlich alles koorekt
v1.erhöheInt(); // Diese Funktion erhöht v1.meinInt[0] um 1. Hier soll nicht v2.meinInt[0] verändert werden, dies geschieht leider trotzdem.
System.out.println("v1.meinInt = " + v1.gibersteInt() + ", v2.meinInt = " + v2.gibersteInt()); // Die Testausgabe bestätigt dies leider...
}
public static void main(String args[]) {
FrontEnd f1 = new FrontEnd();
}
}
Mein Problem besteht nun, wie ich in den Comments schon versucht habe zu verdeutlichen, darin, dass v2.meinInt[] offensichtlich nicht nur eine Kopie von v1.meinInt[] erhält, sondern auf den gleichen Speicher zeigt, sodass sich beide Werte ändern, sobald nur einer von ihnen geändert wird.
Genau das möchte ich vermeiden. v2.meinInt[] soll zwar eine Kopie von v1.meinInt[] erhalten, jedoch sollen danach beide Arrays vollkommen unabhängig voneinander sein.
Woran liegt es / was kann ich machen?
Vielen Dank für eure Hilfe!
Philipp