Der Martin: Stack und Heap

Beitrag lesen

Hi,

  1. Der belegte Speicherplatz ist eine Variable mit Name und Typ, die ein Objekt als Wert enthält.

das ist ungefähr meine Sichtweise. Genauer:
  Objekt   = Speicherinhalt, mit dem das Programm arbeitet
  Variable = Name für ein Objekt eines bestimmten Typs

In diesem Fall wäre der Wert der Variablen als austauschbar zu sehen

Genau.

und könnte in keinem Fall mit dem Objekt gleichgesetzt werden, da ein Objekt eine eindeutige Instanz (im Sinne von Speicherort) sein sollte (wie ich Meine).

Das ist dieselbe Spitzfindigkeit, als wenn ich auf ein Foto zeige und sage: "Das ist meine Schwester." Natürlich ist es nur ein Bild meiner Schwester, aber diesen Unterschied macht normalerweise niemand.
Ebenso ist die Variable natürlich strenggenommen nur der benannte Speicherplatz für ein Objekt. Trotzdem halte ich es für eine zulässige sprachliche Vereinfachung zu sagen: Eine Variable *ist* ein Objekt (repräsentiert ein Objekt).

Für mich stellt es sich bei beiden Betrachtungsweisen so dar, dass ich die Begriffe Objekt und Variable nicht gleichzeitig anwenden kann, da im Endeffekt ein Objekt eine feste Speicherposition hat (im Augenblick der Betrachtung), eine Variable jedoch die Möglichkeit des Wertwechsels voraussetzt.

Das ist für mich kein Widerspruch, wie das folgende, wenig sinnvolle Codebeispiel zeigt:

float anteil = 0.381;

Ich habe nun ein Objekt vom Typ float, das an einer bestimmten (für den Programmierer idR nicht relevanten) Stelle im Speicher liegt. Die Variable "anteil" repräsentiert dieses Objekt und seinen Wert.

anteil = 2.2;

Nun habe ich dem Objekt (der Variablen) einen neuen Wert zugewiesen. Seine Position im Speicher und sein Typ ist unverändert, aber sein Wert ist verändert. Ist das nicht genau das, was du mit dem oben zitierten Satz ausgeschlossen hast? Oder verstehe ich immer noch nicht, was du eigentlich meinst?

Ciao,
 Martin

--
Der Gast geht solange zum Tresen, bis er bricht.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(