2012-10-03 11 views
6

Wenn kann es mit nurWarum ist String eine Klasse?

String s = "Hello"; 

dann eingeleitet werden, warum ist es eine Klasse? Wo sind die Parameter?

+1

Sie haben schon genug gute Antworten, nur eine Anmerkung, die Sie auch machen könnten: Ganzzahl i = 5; Lange l = 6L; usw., während Integer definitiv auch eine Klasse ist. Syntethischer Zucker. –

+0

@AssenKolov sie sind völlig anders in, wie sie umgesetzt werden –

+0

@AssenKolov Also im Grunde, JVM Magie? Ich wusste das nie, danke – Luke

Antwort

10

Da String ist solch eine nützliche und häufig Klasse verwendet, ist es eine spezielle Syntax (über eine Stringliteral Darstellung: der Text innerhalb "") hat für die Erstellung ihrer Instanzen, aber semantisch diese beiden sind äquivalent:

String s = "Hello"; // just syntactic sugar 
String s = new String("Hello"); 

Hinter der Haube sind beide Formen nicht 100% äquivalent, da die Syntax "" versucht, Zeichenfolgen aus dem String-Pool Java zu verwenden, während die explizite Instanziierung mit new String("") immer ein neues Objekt erstellen wird.

Aber machen Sie keinen Fehler, beide Syntax erzeugt einen Verweis auf eine Objektinstanz, Zeichenfolgen werden nicht als primitive Typen in Java und sind Instanzen einer Klasse, wie jeder andere.

+1

+1 für die Erwähnung der konstanten Pool – tddmonkey

0

Die Zeile, die Sie in diesem Beispiel verwenden, erstellt ein String-Objekt. Es gibt keine Parameter im traditionellen Sinne, an die Sie denken.

12
String s = "Hello"; 

ist nur syntaktischer Zucker. Es ist tatsächlich als Referenztyp implementiert. (Es ist eine unveränderliche Referenztyp, so dass Sie kann es nicht ändern)

2
String s = "Hello"; 

JVM behandelt sie als:

String s = new String("Hello"); und Praktikanten zu String Pool als String Literal.

+1

Das ist technisch falsch, da Ihr Beispiel zwei 'String' Objekte erzeugt. – LanguagesNamedAfterCofee

+0

@LanguagesNamedAfterCofee: Nicht sicher, was Sie meinen, könnten Sie genauer sein, so dass ich meine Antwort korrigieren kann. – kosa

+1

"Hello" <- 'String' Objekt wird erstellt ||| new String (...) <- 'String' Objekt wird erstellt – LanguagesNamedAfterCofee

Verwandte Themen