Ich habe zwei Strings wie folgt:
"yes", "no"
.
Nun möchte ich diese Strings auf zwei Arten vergleichen:
Direkt:
Beispiel: "yes".equals("no")
Indem Sie die Strings einer Variablen zuweisen: Beispiel:
%Vor%Gibt es in diesen beiden Fällen einen Speicher- oder Leistungsunterschied?
Es gibt einen sehr kleinen Unterschied (effektiv vernachlässigbar, wir sprechen hier von Mikro-Optimierung), da die Zeichenfolge in einer lokalen Variablen gespeichert werden sollte, die das zusätzliche Bit des Speichers auf dem Stapelrahmen der entsprechenden Methode benötigt. Während die Konstanten tatsächlich im Konstantenpool gespeichert und gemeinsam genutzt werden. Mit den wahrscheinlichen Optimierungen der JVM basierend auf der Anzahl der Aufrufe wird es keinen Unterschied machen.
Beachten Sie, dass der Bytecode derselbe wäre, wenn die Variablen final
oder effektiv final
(nur einmal zugewiesen) wären, da sie in diesem Fall als Konstanten behandelt werden.
Das Kompilieren dieser Code-Snippets führt zu demselben Bytecode. Daher gibt es keinen Speicherverbrauch oder Leistungsunterschied.
Der Zuweisungsoperator nie belegt den Arbeitsspeicher (außer beim Autoboxing: Integer number = 42
). Die lokale Variablendeklaration kann Speicher im Stack zuweisen (falls erforderlich), aber Sie sollten die Lesbarkeit des Codes bevorzugen.
Abhängig vom Compiler könnte es den Platz von zwei zusätzlichen Objektreferenzen auf dem Stack einnehmen, denke ich. Diese sind klein genug, dass Sie sie normalerweise ignorieren können, wenn Sie Ihre Anwendung nicht profiliert haben und Sie dort ein Problem entdeckt haben (sehr unwahrscheinlich).
"ja" .equals ("nein")
In echtem Code gibt es kaum eine Situation wie diese, wie Sie bereits wissen würden, wenn 2 Literale gleich sind oder nicht.
Tags und Links java variable-assignment