Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt

niklas._.kpl

Mitglied
Hallo, ich bin gerade dabei Java zu erlernen. Momentan lerne ich die ArrayList kennen dabei haben sich mir 2 Folgende Frage gestellt.

1. Wenn ich eine ArrayListe erstelle und dieser ein Objekt zuordne, bekommt das Objekt ja ein Index zugeordnet. Aber was passiert mit dem Namen des Objektes, also zum Beispiel:

Java:
String name1 = "Thomas";
String name2 = "Silvia";

List<String> nameListe = new ArrayList<String>();
nameListe.add(name1);
nameListe.add(name2);
Gehen dann die Namen der String Objekte einfach verloren oder wie ist da die Funktionsweise?

2. Wenn ich eine static Methode erstelle, mit der man ein Objekt erstellen kann (Gibt erstelltes Objekt als Rückgabewert zurück). Wenn ich dann die Methode bei der Add(..); Funktion bei einer ArrayList verwende, wird ja das erstellte Objekt direkt in der ArrayListe gespeichert, kann ich dann auch außerhalb der Liste auf dieses erstellte Objekt zugreifen, weil es ja keinen festgelegten Objektnamen hat. (Hoffe, ihr versteht, was ich meine🙂)
Beispiel:
Java:
public class Kontakt {

    //Eigenschaften
    public String name;
    public String telefonNummer;

    public Kontakt(String name, String telefonNummer) {
        this.name = name;
        this.telefonNummer = telefonNummer;
    }

    // Methoden
    public static Kontakt erstelleKontakt(String name, String telefonNummer) {

        return new Kontakt(name, telefonNummer);
    }
}


public static void main(String[] args) {
    List<Kontakt> kontaktListe = new ArrayList<Kontakt>();
    
    kontaktListe.add(erstelleKontakt("Silvia", "01111111"));
}




Vielleicht kann mir ja jemand weiterhelfen.
L.g Niklas
 
Ein Objekt / eine Instanz hat keinen Namen. Eine Variable ist benannt. Aber das hat nichts mit dem Objekt zu tun.

Stellen wir uns das etwas vor wie: Dir gehört ein Auto. Dein Name tut doch nichts zur Sache bezüglich des Autos. Und wenn Du deinen Namen änderst oder Du das Auto verschenkst: Ändert sich dadurch das Auto? Das ist dann nur etwas, um an das Auto heran zu kommen. Ich kann also zu Dir gehen und sagen: Gib mir Dein Auto.

Das Objekt verändert sich also auch nicht - egal wie viele Variablen darauf verweisen oder wie diese auch immer heissen. Das ist nur wichtig, um auf das Objekt zu zu greifen.
 
Du hast eine Variable mit der List. Und diese hält (in einem Array, also auch in einer Variable der List) dann das gesuchte Element. Zugriff darauf kann nur über die Möglichkeiten der List erfolgen. Ein Weg ist über den Index, aber List bietet noch ein paar Möglichkeiten mehr.
 
Ich teste mein Wissen mal selber und hoffe, dass es richtig ist, was ich von mir gebe.

Ja und Nein.
Also kann ich nur über die ArrayList(Index) auf das Objekt drauf zugreifen. Außerhalb gibt es keinen weg?
Eine Liste ermöglicht es dir, einen Haufen von Objekten "zu sammeln". Du kannst die hinzufügen oder löschen aus der Liste, aber erzeugen kannst du sie ja außerhalb. Eine Liste ist ja selber auch ein Objekt. Wenn ein Objekt nicht nur über die Liste referenziert wird (glaube man könnte plakativ sagen "ansprechbar gemacht wird") kannst du auch auf anderen Wegen auf das Objekt zugreifen. Z.B. mit System.out.println(String).

Hoffe Konrad und die anderen Profis zerpflücken mich jetzt nicht 😀 bin selber noch nicht so fit (aber ich wollt auch mal versuchen zu helfen hehe)
 
Ja genau.

(Bei den Variablen spricht man von Referenzen - daher dieses "referenziert". Das Objekt (die Instanz) liegt irgendwo im Speicher und es wird sozusagen in der Variable nur gespeichert, wo dieses zu finden ist.)
Habe gerade in meinem Code noch eine Zeile gefunden:
Java:
new Auto(4,20000); //Neues Auto-Objekt(Reifenanzahl, Preis)

auf dieses Objekt könnte ich dann auch nur zugreifen wenn ich das Objekt einer Variable zuweisen würde Richtig?
 
Habe gerade in meinem Code noch eine Zeile gefunden:
Java:
new Auto(4,20000); //Neues Auto-Objekt(Reifenanzahl, Preis)

auf dieses Objekt könnte ich dann auch nur zugreifen wenn ich das Objekt einer Variable zuweisen würde Richtig?
Ja genau. Ohne Referenz hast du keinen Zugriff mehr drauf (und wenn es sich nicht selbst irgendwo einträgt, dann würde der GC die neue Instanz auch wieder löschen - früher oder später, da dies nicht genau festgelegt ist).
 
Vielleicht sollte man auch einfahc mal nopch kurz das Wort "Aliasing" in den Raum werfen.
Was einfach nur heißt dass ein Objekt von verschiedenen Variabeln und Ähnlichem aus erreicht werden kann.
In deinem Beispiel wird das String Objekt mit Inhalt "Thomas" sowohl von der Variable name1 sowie auch von der ArrayList aus referenziert.

Heißt 2 Sahcen zeigen auf das Ein und Selbe Objekt.
Daher Aliasing da du bei
Java:
System.out.println(name1);
System.out.println(nameLsite.get(0);
2 mal genau Dasselbe ausgegeben bekomst, nämlich "Thomas".


So wie man in der realen Welt ja auch auf Dieselbe Person in verschiedenen Weisen Bezug nehmen kann,
wie "Anton Müller", "der Vater von Paul Müller", "der aktuelle Eigentümer des Autos mit Kennzeichen Js-3578", etc.

Diverse Möglichkeiten, die alle auf die selbe Sache zeigen.

Und wie Konrad und Co. sagen:
Zeigt gar Nichts mehr auf ein bestimmtes Objekt, dann ist es unerrechbar und Java beseitigt es intern.
 

Zurück
Oben