2012-03-30 19 views
3

ich für meine Applictation bin Codierung, stieß ich auf eine Anforderung, wobei i Array I, warum es nicht eine Nullpointer in diesem Fall

String str_a = "Testing"; 

char c[] = str_a.toCharArray(); 

for (char d : c) { 
    System.out.println(d); 
} 

wie ich verkohlen einen String zu konvertieren benötigt wirft nicht die char c[]

Meine Frage initialisieren ist, warum es nicht ein NullPointerException wirft, in der Regel soll dies auf diese Weise

erfolgen

Antwort

3

Der Quellcode von toCharArray():

/** 
* Converts this string to a new character array. 
* 
* @return a newly allocated character array whose length is the length 
*   of this string and whose contents are initialized to contain 
*   the character sequence represented by this string. 
*/ 
public char[] toCharArray() { 
    char result[] = new char[count]; // <-- Here is the initialization :) 
    getChars(0, count, result, 0); 
    return result; 
} 
+0

Danke, es war eine gute Erklärung – Pawan

5

Weil str_a.toCharArray(); bereits ein richtiges Zeichenarray initialisiert und zuordnet. Was diese Methode zurückgibt, hat bereits die Zuweisung und Initialisierung für Sie vorgenommen.

+0

dem hinzuzufügen, wenn Sie vor dem Aufruf von 'ToCharArray zu' char_array' ein leeres Array zugeordnet waren () ', das ursprüngliche Array muss jetzt GC'd bekommen. –

+0

Es gibt * Orte in Java, an denen das Zielarray vom Aufrufer zugewiesen wird. Diese APIs erfordern jedoch, dass Sie das Zielarray als Parameter übergeben. Siehe zum Beispiel 'InputStream.read (...)'. –

1

Es ist nicht erforderlich, char_array zu initialisieren, wenn Sie das Ergebnis str_a.toCharArray() sofort char_array zuweisen. In Ihrem zweiten Beispiel erstellen Sie ein leeres Array, das sofort verworfen wird, weil Sie dann str_a.toCharArray() berechnen. Die Methode toCharArray berechnet den Wert des Arrays und gibt es zurück, sodass Sie es nicht selbst erstellen müssen.

1

Beide Methoden gut funktionieren. Die erste definiert das neue Array als das char-Array und das zweite erstellt ein leeres Array und legt es so fest, dass es dem char-Array entspricht. wenn man sich daran gewöhnt, sind beide gleich, aber die zweite hat nur mehr Linien.

Sie können auch einige Zeit und tun sparen:

for(char c : str_a.toCharArray()){ 
    System.out.println(c); 
} 
0

Verfahren string.toCharArray() ein neues char[] zurückgibt, müssen Nein, um die Variable auf etwas anderes zuerst zu initialisieren.

Infact, wenn Sie links Ihr Code wie ...

char[] char_array = new char[str_a.length()]; 
char_array = str_a.toCharArray(); 

Dadurch wird die Variable auf eine Instanz eines char[] initialisieren würde und dann entfernt die Instanz werfen auf der nächsten Zeile. Dies ist ineffizient, sinnlos und verschachtelt.

0

wie in gezeigten Code Sie Variable c, aber statt verwenden c Sie verwenden haben char_arra

char[] char_array = new char[str_a.length()]; 

char_array = str_a.toCharArray();  

for (char d : char_array) { 
      System.out.println(d); 
     } 
Verwandte Themen