2012-03-30 24 views
2

Mögliche Duplizieren:
Questions about Java's String poolÜber das Schlüsselwort "new" in Java

Jungs, was der Unterschied zwischen diesen beiden ist.

(1)

String s = new String("hello"); // creating an object on heap then assign that object to the reference s. 

(2)

String s = "hello" // did I make an object here?? Im not using the word new. 

Auch Array Beispiel

int x[] = {1, 2, 3, 4, 5}; // did I make object here? 

Antwort

0
  1. Ja, Sie haben eine neue Zeichenfolge erstellt obj
  2. „Hallo“ auf der Halde sein kann, aber es ist nicht wirklich in der Halde. Und es ist nicht zur Laufzeit erstellt/zugeordnet. Stattdessen ist es interniert, bevor Ihr Programm in Gang kommt.
  3. Ja Sie ein int [] in dem Heap erstellt
4

String s = "hello" Zuweisung wird der string literal "Hallo" s

Mit dem Schlüsselwort new erstellen Sie ein neues Objekt zusätzlich zum Zeichenfolgenliteral.

beachten Sie, dass:

String s = "hello"; 
System.out.println(s == "hello"); 
s = new String("hello"); 
System.out.println(s == "hello"); 

wird höchstwahrscheinlich Ausbeute

true 
false 

Da s ist referncing die Stringliteral "Hallo" - Sie eine Identität im ersten Fall bekam, während in der zweiten ist es ein neues Objekt, und es gibt keine Identität - das sind zwei verschiedene Objekte, die zufällig denselben Wert enthalten.

In Bezug auf Ihre Array-Frage: Ja, ein int[] Objekt wird erstellt.

+0

nur als Hinweis verwendet werden können, wird die Zeichenfolge literal ein Sourcecode-Darstellung eines vordefinierten Stringobjekt. Mit dem neuen Schlüsselwort erstellen Sie also eine * Kopie * eines vorhandenen String-Objekts. Sie enden also mit 2 String-Objekten anstelle von einem. –

+0

so String s = "Hallo" hat kein neues Objekt erstellt ?? Ich dachte in Java ist alles ein Objekt ?? – user1293258

+0

@ user1293258: Es ist ein Objekt, es ist nur ein * String-Literal *. Das jvm verwaltet einen * Pool * von String-Literalen und verwendet dasselbe Objekt erneut. Also, im Assessment 's =" Hallo "' und wenn später 's' mit' "Hallo" 'verglichen wird, wird das gleiche String-Literal verwendet - welches das gleiche Objekt ist. Und in Bezug auf: 'Ich dachte in Java ist alles ein Objekt '- es ist nicht wahr. 'int',' boolean' [und alle anderen * primitiven Typen *] sind ** nicht ** Objekte. – amit

0

In Bezug auf Zeichenfolgenkonstruktor haben Sie immer Objekte.

, wenn Sie sagen

String test = "test"; 

Sie erstellen ein String-Objekt mit Inhalt „Test“, aber wenn Sie sagen,

String test= new String("test"); 

Sie mit Inhalt „test“ ein String-Objekt erstellen und geben es als Argument für die Zeichenfolge Konstruktor, um ein neues String-Objekt zu erstellen. So hatten Sie schließlich 2 String-Objekte erstellt.

Der Code des Konstruktors ist:

public String(String original){.....} 

Der String-Konstruktor ist in den meisten Fällen nutzlos betrachten.

In diesem Thread sie beschrieben ist, wenn es

Use of the String(String) constructor in Java

Verwandte Themen