ArrayList

Status
Nicht offen für weitere Antworten.

michi2

Bekanntes Mitglied
Bitte nicht hauen: Anfängerfrage 😳
Wieso funktionirt folgendes?

Code:
import java.util.*;

class X
   {
   private int a = -1;
   public void setA(int neua)
      {
      a = neua;
      }
   public int getA()
      {
      return a;
      }
   }
public class Y
   {
   public static void main(String[] args)
      {
      ArrayList al = new ArrayList();
      al.add(new X());
      System.out.println("Vorher: " + ((X) al.get(0)).getA() );
      ((X) al.get(0)).setA(999);
      System.out.println("Nachher: " + ((X) al.get(0)).getA() );
      }
   }
Ausgabe:
java Y hat gesagt.:
Vorher: -1
Nachher: 999
 
Das holst dir eine Referenz auf ein Objekt und änders eine Property. Wenn du später das Objekt ausgibst, hat sich der Wert der Property natürlich verändert, da es sich hier um das selbe Objekt handelt.
 
Naja, ich dachte es währe so:
ArrayList.get liefert eine Kopie von dem Element und dieses verändere ich, nicht das in der ArrayList!??
Liefert ArrayList.get einen Zeiger/Pointer? (Wusste garnicht das es in Java sowas giebt...)
 
michi2 hat gesagt.:
Liefert ArrayList.get einen Zeiger/Pointer? (Wusste garnicht das es in Java sowas giebt...)
Der Begriff des Zeigers wird in Java nicht verwendet, da es exakt so etwas nicht gibt. Aber es gibt Referenzen. Und Objekte werden standardmäßig immer per Referenz übergeben. Such einfach mal in Bezug zu Java nach Call by Value und Call by Reference.
 
Von alleine wird mal jar nüscht kopiert, es sei denn du findest irgedow etwas (Klasse oder Methode), mit den Worten "clone" oder "copy" im Namen. Dann würde es sich lohnen sich die Doku mal anzuschauen.
 
hupfdule hat gesagt.:
Der Begriff des Zeigers wird in Java nicht verwendet, da es exakt so etwas nicht gibt. Aber es gibt Referenzen. Und Objekte werden standardmäßig immer per Referenz übergeben. Such einfach mal in Bezug zu Java nach Call by Value und Call by Reference.
Und genau bei dieser Suche wird oft die falsche Antwort gefunden. In Java wird alles by Value übergeben, nur ist der Value eben kein Objekt, sondern eine Referenz.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben