Ich bin ein C++-Typ, der Java lernt. Ich lese gerade Effektives Java und etwas hat mich verwirrt. Da steht, dass man niemals Code wie diesen schreiben soll:
String s = new String("silly");
Weil es unnötig ist String
Objekte. Stattdessen sollte es aber so geschrieben werden:
String s = "No longer silly";
So weit, so gut... Aber in Anbetracht dieser Klasse:
public final class CaseInsensitiveString {
private String s;
public CaseInsensitiveString(String s) {
if (s == null) {
throw new NullPointerException();
}
this.s = s;
}
:
:
}
CaseInsensitiveString cis = new CaseInsensitiveString("Polish");
String s = "polish";
-
Warum ist die erste Aussage in Ordnung? Müsste es nicht heißen
CaseInsensitiveString cis = "Polish";
-
Wie kann ich die
CaseInsensitiveString
sich verhalten wieString
daher ist die obige Aussage in Ordnung (mit und ohne ErweiterungString
)? Was hat es mit String auf sich, dass es in Ordnung ist, ihm einfach ein Literal wie dieses zu übergeben? Soweit ich weiß, gibt es in Java kein Konzept des "Kopierkonstruktors"?