# Definition / Deklaration



## geBlain (3. Sep 2010)

Hallo,

wie sieht eine Deklaration eines Strings aus und wie eine Definition?

Deklaration= String name = new String();
Definition= String name = new String("hallo");

Ist das so richtig?

MFG


----------



## XHelp (3. Sep 2010)

Hm, ne, ich glaube nicht.
Ich denke die Begriffe nehmen sich bei Variablen nichts.
Bei Methoden z.B.: bei Interfaces deklarierst du die Methoden. Wenn du das Interace dann implementierst, dann Definierst du diese.

Aber unabhängig davon, ob es ein Unterschied zwischen Deklaration und Definition gibt: Deine 2 Beispiele sind gleich.


----------



## timbeau (3. Sep 2010)

Ich kenne nur Deklaration und Initialisierung

int a;  vs int a = 2;

Bei Strings sind String s = "hallo" und String s = new String("hallo")
weitestgehend identisch.


----------



## nrg (3. Sep 2010)

timbeau hat gesagt.:


> Bei Strings sind String s = "hallo" und String s = new String("hallo")
> weitestgehend identisch.



Nicht wirklich. String s = "hallo"; ist ein Stringliteral und landet im Pool. Somit erfolgt auch die Speicheroptimierung, weil zuvor gecheckt wird, ob bereits ein gleiches Stringliteral im Pool existiert. String s = new String("hallo"); erzeugt dir mit 100%iger Wahrscheinlichkeit ein neues Stringobjekt und landet afaik nur aufm heap (wenn ich dabei falsch liege, lasse ich mich gern eines besseren beraten ).

What is String literal pool?

@topic:
also würde auch sagen, dass Deklaration bzw. Definition die Typisierung und Namensgebung ist und Initialisierung die Wertzuweisung.


----------



## timbeau (3. Sep 2010)

Du hast natürlich recht, was die Pool-Darstellung betrifft. Aber ist das bei heutigen Ressourcen noch bedeutend? Andere Gründe gibts bestimmt, aber in komplexere Programme/Probleme bin ich noch längst nicht vorgedrungen


----------



## XHelp (3. Sep 2010)

timbeau hat gesagt.:


> Du hast natürlich recht, was die Pool-Darstellung betrifft. Aber ist das bei heutigen Ressourcen noch bedeutend? Andere Gründe gibts bestimmt, aber in komplexere Programme/Probleme bin ich noch längst nicht vorgedrungen


Das ist genau der Grund, warum man für jedes Spiel einen neuen Rechner braucht: "Code optimizieren? Tzzzz... wer braucht den so ein Quatsch... lass den User einfach mehr blechen".ueh:


----------



## Marcinek (3. Sep 2010)

Es ist in dem Stringfall lediglich relevant, damit man nicht "==" für Stringvergleiche benutzt.

Weil du dann genau dieses Problem hast

new String("Hallo") ist ungleich "Hallo" aber "Hallo".equals(new String ("Hallo)) = true


----------



## timbeau (3. Sep 2010)

Ich käme nie auf die Idee Strings mit new zu deklarieren...bin ich jetzt ein braver Coder? :rtfm:


----------



## nrg (3. Sep 2010)

würde sagen ja 



Marcinek hat gesagt.:


> Es ist in dem Stringfall lediglich relevant, damit man nicht "==" für Stringvergleiche benutzt.
> 
> Weil du dann genau dieses Problem hast
> 
> ...



schreib jetzt vom iPhone, also kann ich schwer den Compiler fragen aber ausm Kopf würd ich sagen letzteres ergibt false. wie gesagt, das erzeugt ein neues Objekt aufm heap und nicht im Pool als Literal.


----------



## XHelp (3. Sep 2010)

timbeau hat gesagt.:


> Ich käme nie auf die Idee Strings mit new zu deklarieren...bin ich jetzt ein braver Coder? :rtfm:



Ich bin einfach über die Straße gelaufen, zufällig war die Ampel auf grün. Bin ich jetzt ein gesetzttreuer Bürger? 
Natürlich lassen sich manche Sachen bei heutigen Größen vernachlässigen, aber Kleinvieh macht auch Mist.


----------



## eRaaaa (3. Sep 2010)

nrg hat gesagt.:


> würde sagen ja
> 
> 
> 
> schreib jetzt vom iPhone, also kann ich schwer den Compiler fragen aber ausm Kopf würd ich sagen letzteres ergibt false. wie gesagt, das erzeugt ein neues Objekt aufm heap und nicht im Pool als Literal.



da steht doch aber EQUALS nicht == ! :autsch:???:L


----------



## nrg (4. Sep 2010)

achso. übersehen. wie gesagt, bin unterwegs. dann stimmt das natürlich


----------



## Wortraum (4. Sep 2010)

timbeau hat gesagt.:


> Du hast natürlich recht, was die Pool-Darstellung betrifft. Aber ist das bei heutigen Ressourcen noch bedeutend?


Das kommt darauf an, was man macht. Für HelloWorld ist es unbedeutend. Hat man aber ohnehin schon viele Tausende Objekte in einigen Gigabyte verteilt, kämpft mit kompletten Speicherbereinigungen und blockierten JVMs, dann möchte man sicherlich nicht noch mehr Objekte anhäufen.


----------



## Ezra (5. Sep 2010)

geBlain hat gesagt.:


> Hallo,
> 
> wie sieht eine Deklaration eines Strings aus und wie eine Definition?
> 
> ...


Google ist Dein Freund.



			
				http://de.wikipedia.org/wiki/Deklaration_%28Programmierung%29 hat gesagt.:
			
		

> In der Informatik und Programmierung ist eine Deklaration die Festlegung von Dimension, Bezeichner, Datentyp und weiteren Aspekten einer Variablen oder eines Unterprogramms. Durch die Deklaration wird dem Compiler diese Variable bzw. dieses Unterprogramm bekannt gemacht; es ist damit zulässig, diese an anderen Stellen im selben Quelltext zu verwenden.
> 
> Bei Variablen spricht man von Definition, wenn der Compiler Code erzeugt, der entweder statisch (im Datensegment) oder dynamisch (zur Laufzeit) Speicherplatz für diese Variable reserviert. Bei Unterprogrammen spricht man von Definition, wenn an dieser Stelle der Quelltext des Unterprogramms angegeben ist, der vom Compiler übersetzt wird.



Deine Beispiele sind nicht korrekt.
String name = new String("hallo");
ist sowohl Deklaration als auch Definition. Tatsächlich muss das so aussehen:
String name; --> Deklaration
name = "hallo"; --> Definition


----------

