2016-06-22 10 views
1

was ist schneller neue Variable erstellen oder alte für Java-Programmiersprache wiederverwenden? Beispielwas ist schneller, Erstellen neuer Variable vs Wiederverwendung alter Variable?

Fall 1:

int x = 5; 
int var = 1; 

Fall 2 zu erstellen: die Wiederverwendung von alten

int x = 5; 
x = 1; 
+0

Ich bin nicht sicher, ob man schneller als die andere ist, wenn der Boden auf dem Stack etwas weniger Raum verwenden kann. Im Allgemeinen sollten Sie es vermeiden, neue Variablen unnötig zu deklarieren, und dies ist im Allgemeinen eine gute Vorgehensweise. –

+3

Ich würde definitiv eine neue Variable erstellen, wenn sie für etwas verwendet wird, das nichts damit zu tun hat. Geben Sie Variablen immer aussagekräftige Namen und behalten Sie diese Bedeutung in Ihrer gesamten Anwendung bei. In Bezug auf die Leistung werden sie identisch sein, da sie beide eine Zuweisung machen. (Und wenn sie Objekte wären, würden sie beide für die Garbage Collection zur Verfügung stehen) – 4castle

+1

Strike, dass sie nicht ganz identisch wären, weil die erste neuen Speicher für den Zeiger/Primitiv im Stack zuweisen würde (was fast 0 Mal dauert, aber in der Tat) – 4castle

Antwort

1

"Was ist schneller?" ist die falsche Frage. "Was ist richtig für den Algorithmus?" ist die richtige Frage.

In der Regel können Sie eine Variable nur dann wiederverwenden, wenn sie einen neuen Grundwert enthalten oder auf ein anderes Objekt zeigen muss, da dies die Variable ist, die den aktuellen Zustand darstellt. Wenn die Variable neu zugewiesen wird, um etwas zu halten, das bedeutet, dass Sie etwas anderes als sind, sollten Sie das nicht tun, aber eine neue Variable verwenden.

Also sum += item; ist eine gültige Wiederverwendung der Variablen sum. Aber

foo = 42; 
buyQuantity(foo); 
... 
foo = 23; 
sendMessages(foo); 

ist keine gültige Wiederverwendung von foo.

Eine verwandte, aber andere Frage ist, ob Sie ein Objekt erneut verwenden sollten, um neue Werte zu speichern. Nicht gewöhnlich. Zum Beispiel:

Foo foo = new Foo(); 
for (int ix = 0; ix < MAX_ITERS; ++ix) 
{ 
    foo.clear(); 
    foo.fill(); 
    process(foo); 
} 

ist schlimmer als:

for (int ix = 0; ix < MAX_ITERS; ++ix) 
{ 
    Foo foo = new Foo(); 
    foo.fill(); 
    process(foo); 
} 
+0

Können Sie ein wenig darüber nachdenken, warum 'foo.clear()' schlecht wäre? Du hast das irgendwie beschönigt. – 4castle

+0

danke für die Antwort, aber ich bin nicht besorgt über die Algorithmus-Korrektur Ich möchte nur wissen, welche schneller ausgeführt wird? die neue Variable oder alte wiederverwenden? –

+0

@ 4castle, die außerhalb der Schleife liegende Variable ist nur dann korrekt, wenn sie außerhalb der Schleife verwendet wird. Wenn es nur innerhalb der Schleife verwendet wird, sollte es sich innerhalb der Schleife befinden. Es ist eine Frage der Korrektheit des Umfangs. Darüber hinaus besteht die Gefahr, dass die Bindung an das referenzierte Objekt zu lange an die Dauergeneration weitergegeben wird, was in der Regel weniger optimal ist, als es in der schneller zu sammelnden jungen Generation zu halten. –

Verwandte Themen