| 

.NET C# Java Javascript Exception

5
Ich weiß, dass die Klasse String eine Sonderstellung unter den Javaklassen einnimmt. Sie ist die einzige Klasse, die ohne den Operator new instanziiert werden kann. Ein String-Objekt mit dem Wert "Hallo" kann daher auf zwei Arten erzeugt werden:

Beispiel:
// String-Objekt ohne Operator new
String str1 = "Hallo";

// String-Objekt mit Operator new
String str2 = new String("Hallo");


Mir ist aber nicht klar, wo hier der Unterschied liegt?
News:
20.12.2011
ecoelectric 21 2
"[String] ist die einzige Klasse, die ohne den Operator new instanziiert werden kann."

Da wäre ich mir nicht so sicher. Mit Class.forName() kann man eine Instanz von Class<T> erzeugen. Ich nehme an, dass die Art der Instanziierung von der konkreten Ablaufumgebung abhängt und wäre jedenfalls nicht überrascht, wenn das in einigen Fällen auch ohne den internen Gebrauch von "new" abläuft. Weiß da vielleicht jemand noch näheres?
Matthias Hlawatsch 20.12.2011
Es gibt eigentlich keinen Unterschied. Class.forName().newInstance hat den charmanten Vorteil, dass du den ClassLoader beeinflussen kannst, während new den Standardloader der VM verwendet.
Karl 20.12.2011
1 Antwort
2
Der Unterschied liegt darin, das Ersteres aus dem Literal Pool genommen wird, also nur ein einziges Mal vorhanden ist. Auch wenn du mehreren String Instanzen den Wert zuweisen würdest.

String s1 = "Hallo";
String s2 = "Hallo";

String s3 = new String("Hallo");
if(s1 == s2){
System.out.println("Sind die selben!");
}

if(s3 != s1){
System.out.println("Die nicht!");
}


Siehe auch:
http://www.teia-backup.de/Kostenlose-Kurse/JAVA/6657-Die-Klasse-java-lang-String.html

Gruß Karl
20.12.2011
Karl 958 8

Stelle deine Java-Frage jetzt!