2016-05-05 2 views
3

Ich lerne über gute Praxis für Java-Codierung. Normalerweise sehe ich ein Beispiel wie unten. Strings sind unveränderlich, daher nehme ich an, dass die Neuzuweisung von Werten an dieselbe String-Variable ein anderes String-Objekt erzeugen könnte. Ich bin ein bisschen verwirrt.Wird die gleiche String-Variable mit nextLine() eine schlechte Übung in Java neu zuweisen?

Werden Codes unten als eine schlechte Praxis angesehen? Bedeutet das nicht, dass der gleiche String-Referenzpunkt auf die verschiedenen Objekte zeigt und wir nicht mehr auf diese Objekte zugreifen können? Wenn dies zutrifft, sollten wir die replace() -Methode verwenden, um diese Situation zu vermeiden? Stimmt es, dass wir einfach andere Klassen wie StringBuilder verwenden sollten? Ich brauche nur eine Bestätigung über meine Gedanken.

Scanner input = new Scanner(System.in); 
String str = null; 
while(input.hasNext()){ 
str = input.nextLine(); 
System.out.println(str); 
} 

Vielen Dank

+1

Nein, es ist in Ordnung. Aber in diesem Fall würde das Deklarieren von "str" ​​innerhalb der Schleife seinen Umfang reduzieren, was allgemein als gute Praxis angesehen wird. – markspace

+0

Sie haben Recht - das zweite Mal, wenn Sie die Schleife durchlaufen und 'str' zuweisen, ist die' 'String' ', die beim ersten Mal erstellt wurde, nicht mehr zugänglich. Das ist in Ordnung, weil (1) du es nicht mehr brauchst, und (2) das Objekt wird nicht für immer den Speicher auffüllen, weil Java einen _garbage collector_ hat, der den Speicher schließlich für Objekte wiederverwenden wird, die nicht sind benutzt noch mehr. – ajb

+0

Im Prinzip ist dies die 100% normale Vorgehensweise in speicherverwalteten Sprachen wie Java oder C#. Wenn Sie Programme schreiben, die auf Systemen mit sehr begrenztem Speicher ausgeführt werden und/oder hoch optimiert werden müssen, sollten Sie eine andere Sprache verwenden. – ajb

Antwort

1

Mehr oder weniger ist es in Ordnung die gleiche Variable zu verwenden, um eine Eingabe durch nextline() (oder ähnliche Verfahren) zu scannen. Aber ich stimme dem @markspace-Kommentar zu, dass str innerhalb der Schleife definiert sein sollte, wenn Sie nicht beabsichtigen, es außerhalb der Schleife zu verwenden. Und ja, da Sie den Verweis auf Ihren alten String verlieren, so dass Sie nicht mehr darauf zugreifen können, und Garbage Collector löscht ihn aus dem Speicher, sobald er feststellt, dass keine eingehenden Zeiger auf diese Variable vorhanden sind. Aber das ist in Ihrem Fall in Ordnung, da Sie keine Verarbeitung mehr mit dem alten Wert vornehmen müssen.

Kurz gesagt, wenn Sie diesen Wert irgendwann in Zukunft verwenden möchten, dann müssen Sie in einer anderen Variablen oder einem Array oder etwas ähnliches speichern, sonst können Sie die gleiche Variable verwenden, um den Wert zu halten und kümmern sich nicht um die alte Werte.

Verwandte Themen