# Was ist eine Referenz?



## BigmasterDenis (18. Aug 2004)

Hi Leute!

Ich lese überall was von Referenzen. Ich weiß inzwischen, dass auch (oder nur?) Objekte als Referenzen bezeichnet werden. Aber das hilft mir irgendwie nicht weiter. 

Wenn die Rede von Referenzen ist... kann man dan annehmen, dass es sich dabei um Objekte und um nichts anderes handelt? 


thanx4help



Gruß

Denis


----------



## meez (18. Aug 2004)

Ein Objekt ist keine Referenz sondern ein Objekt hat eine Referenz.
Die Referenz ist eigentlich nur die Adrsse des Objektes, damit jemand anderes es finden kann (Physisch ist es eine Speicheradresse).



			
				L-ectron-X irgendwo hier im Forum hat gesagt.:
			
		

> Eine Referenz ist ein Zeiger auf eine Speicheradresse im Heap (Speicherbereich für Objekte in der VM), an der ein Objekt gespeichert ist.


----------



## Beni (18. Aug 2004)

Stell dir eine Referenz wie ein Wegweiser zu einem Haus (dem tatsächlichen Objekt) vor. 
Ein Wegweiser kann in verschiedene Richtungen zeigen, man kann ihn einfach hin und her drehen (aber wenn man ein Wegweiser dreht, muss man natürlich wissen _wohin_ man ihn dreht. Und wohin er zuvor zeigte, kann man nicht mehr sagen). Ein Haus dagegen bleibt immer am selben Standort (bis es eingerissen wird).
Und ein Wegweiser kann in die Irre führen, dann zeigt er zu gar keinem Haus (null-Referenz).


----------



## Anubis (18. Aug 2004)

eine Referenz ist nicht weiter als ein Zeiger auf ein Object.
Wenn du ein Object erzeugtst, etwa so:

```
ABC meinabc = new ABC();
```
erzeugst Java ein Object und legt es irgendwo im Speicher ab. 
und die Variable meinabc enthählt dieses Object *NICHT*, sondern enthählt lediglich eine Referenz auf diese Obekt, und jedesmal wenn du auf meinabc zugreifst, greifts du auch das Objekt zu.

Wenn du danach so was machst:

```
ABC neuabc = meinabc
```

wird, das Objekt,d ass du oben erzeugt hast NICHT kopiert, wie das bei Elementaren Datentypen der Fall ist, sondern du gibts neuabc eine Referenz, die auf das SELBE object weist.

Zur verdeutlichung:

```
String a = new String("abc");
String b = new String("abc");
```
Diese beiden Zeilen erzeugen zwei String-Objekte die mit den Variablen a und b referenziert wird. Da a ein anderen Objekt Refrenziert als b gilt a != b..


```
String a = new String("abc");
String b = a;
```
Hier wird nur ein Objekt erzeugt und die Refrenz in b kopiert. Somit gilt: a == b


----------



## BigmasterDenis (18. Aug 2004)

also bekommt ein gerade erzeugtes Objekt eine Referenz. Spricht es wird referenziert. 
Habe ich das richtig verstanden? 

Der Speicheradresse des Objekts ist für mich nicht ersichtlich, nur für den Compiler, oder?


----------



## meez (18. Aug 2004)

BigmasterDenis hat gesagt.:
			
		

> also bekommt ein gerade erzeugtes Objekt eine Referenz. Spricht es wird referenziert.
> Habe ich das richtig verstanden?



Ja...



			
				BigmasterDenis hat gesagt.:
			
		

> Der Speicheradresse des Objekts ist für mich nicht ersichtlich, nur für den Compiler, oder?


Nicht so einfach...
Dem Compiler ist es aber sowieso egal...Die VM weiss es genau..


----------



## BigmasterDenis (18. Aug 2004)

danke, ich denke damit hat sich die Frage erledigt


----------

