kleine Frage zu "new"

jeipack

Erfahrenes Mitglied
Hi
sowas ähnliches hatte ich schonmal, aber ihrgendwie hab ichs noch nicht richtig verstanden:
Java:
Object blah;
blah="blub";
Java:
Object blah = new Object();
blah="blub";

Geschiet da intern genau das gleiche, oder gibt bei diesen 2 Varianten einen unterschied?
Soviel ich weiss erstellt dieses "blub" automatisch einen neuen String und somit auch ein Objekt. Somit würde die 2. Variante 3 Objekte erstellen und die erste nur 2?

gruss und vielen Dank
jeipack
 
Du änderst jeweils den Zeiger der Objektvariablen.
Welchen Zustand die Objektvariable vorher hatte, ist eigentlich egal (mit oder ohne Objektreferenz).
Es läuft also beides auf das selbe hinaus.
 
Hallo,

Erst mit new ... wird wirklich eine Instanz erzeugt.

Java:
      Object blah;
      blah="blub";
Mit Object blah; wird KEIN Objekt erzeugt sondern nur eine Variable deklariert... (Bei C++ wäre das anders...)
blah="blub"; Ist ein Sonderfall mit einer Konstanten Stringreferenz. Konstante Stringreferenzen werden in einem internen Stringpool abgelegt. Jede Variable die im Code auf eine Stringkonstante referenziert zeigt auf den selben String.

Java:
      Object blah = new Object();
      blah="blub";
hierbei erzeugst du eine Instanz von Object und weist die Referenz auf die Object-Instanz der Variablen blah zu.
Anschließend nimmst du den Konstanten String "blub" aus dem internen Stringpool und speicherst dessen Referenz in blah.
(Alle Konstanten Stringreferenzen werden beim Laden einer Klasse in den internen Stringpool der JVM kopiert)

Gruß Tom
 
Geschiet da intern genau das gleiche, oder gibt bei diesen 2 Varianten einen unterschied?

Intern wird bei der ersten Variante ein Objekt erzeugt (der String - ein Object blah; erzeugt noch kein Objekt!).
Bei der zweiten Variante werden zwei Objekte erzeugt, erst vom Typ Object, dann vom Typ String. Das erste Objekt wird allerdings gleich wieder dereferenziert und somit verworfen.

//edit: zu langsam :)
 
Das mit diesem Stringpool ist wirklich interessant. Aber vielleicht war das Beispiel mit dem String nicht die beste Idee.

den sowas funktioniert ja auch:
Java:
Object blah;
blah = 3;
hierbei wird ja gar kein Objekt erzeugt.. ?

und hier die "new"-Variante:
Java:
Object blah= new Object();
blah = 3;
 
ahh!
Oke super vielen dank an euch alle.
Aber vor allem an Thomas Darimont, du hilfst den Leuten wirklich ungemein! *Lob verteil :)*


Gruss
 
Zurück