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?
"[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?
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.
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!"); }
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?