Ich google und google aber finde nicht wirklich was brauchbares <.<
Problem ist folgendes:
Java:
main(){int i =0;methode1(i);//i ausgeben}methode1(int zahl){
zahl++;}
beim ausgeben sollte nun 1!!! rauskommen.
Ich habe irgendwo mal gelesen dass/wie das geht. ich komme aber nicht mehr drauf...
habs schon mit methode(int &zahl) versucht, aber Eclipse nimmt das nicht an...
Du musst eine Klasse als Wrapper für den Wert nutzen, da gäbe es z.B. den AtomicInteger, welche gleich noch andere Möglichkeiten bietet (AtomicInteger (Java Platform SE 6)).
Ansonsten einfach ein Bean welches den Wert vorhält.
Im Grunde ist Java CallByValue. Das heißt bei primitiven Datentypen wird der Wert übergeben, also kopiert.
Eigentlich ist es bei Objekten genauso, es wird aber die Referenz kopiert. Also adresse wohin gezweigt wird. Änderst du dann das Objekt. Ändert es sich auch beim Aufrufer, da es ja das selbe ist:
Ich hab da vor Kurzem eine Demo geschrieben die zeigt was geht und was nicht
Java:
publicclassCallValueCallRefDemo{publicstaticclassMyInt{privateint value =0;publicvoidset(int i){ value = i;}publicintget(){return value;}publicStringtoString(){return""+value;}}privatestaticvoidsetValue(int pValue){System.out.println("setValue(int): Parameter vor dem Setzen = "+ pValue);// Bewirkt ausserhalb ncihts, da pValue eine Kopie ist
pValue =999;System.out.println("setValue(int): Parameter nach dem Setzen = "+ pValue);}privatestaticvoidsetValue(Integer pValue){System.out.println("setValue(Integer): Parameter vor dem Setzen = "+ pValue);// Hier wird implizit ein neuer Integer angelegt// Da aber pValue nur eine Kopie der eigentlichen Referenz ist, bewirkt das nichts// Integer hat aus mir unbekannten Gründen keine set Methode
pValue =999;System.out.println("setValue(Integer): Parameter nach dem Setzen = "+ pValue);}privatestaticvoidsetValue(MyInt pValue){System.out.println("setValue(MyInt): Parameter vor dem Setzen = "+ pValue.get());
pValue.set(999);System.out.println("setValue(MyInt): Parameter nach dem Setzen = "+ pValue.get());}publicstaticvoidmain(String[] args){int i =1;System.out.println("int im Main vor dem Aufruf "+ i);setValue(i);System.out.println("int im Main nach dem Aufruf "+ i);System.out.println();Integer j =2;System.out.println("Integer im Main vor dem Aufruf "+ j);setValue(j);System.out.println("Integer im Main nach dem Aufruf "+ j);System.out.println();MyInt k =newMyInt();
k.set(2);System.out.println("MyInt.value im Main vor dem Aufruf "+ k);setValue(k);System.out.println("MyInt.value im Main nach dem Aufruf "+ k);}}