Das Schlüsselwort „final“ in Java kann verwendet werden, um konstante Werte zu definieren und zu verhindern, dass Variablen, Methoden oder Klassen geändert oder überschrieben werden. Unveränderlichkeit hingegen beschreibt die Eigenschaft eines Objekts, während seiner gesamten Existenz in einem konstanten Zustand zu bleiben. Sobald ein Objekt gebildet ist, ändert sich sein Wert nicht.
Variablen, Methoden und Klassen werden durch das Schlüsselwort „final“ eingeschränkt, aber die Unveränderlichkeit geht noch einen Schritt weiter und stellt sicher, dass der gesamte Zustand des Objekts erhalten bleibt.
Lassen Sie uns in diesem Artikel die wichtigsten Unterschiede zwischen final und unveränderlich verstehen.
Das letzte Schlüsselwort in Java weist mehrere Merkmale auf:
Endgültige Variable: Ihr Anfangswert kann nach der Initialisierung nicht geändert werden. Sie werden häufig verwendet, um unveränderliche oder unveränderliche Werte anzugeben.
Final-Methoden: Sie können nicht von Unterklassen geändert werden, um sicherzustellen, dass sie sich konsistent verhalten. Sie tragen dazu bei, die Wirksamkeit wichtiger Verfahren aufrechtzuerhalten.
Abschlussklassen: Sie können nicht durch andere Klassen erweitert werden und ihre Implementierung wird garantiert nicht verändert. Abschlussklassen werden häufig zum Erstellen von Sicherheits- oder Hilfsklassen verwendet.
Initialisierung: Um sicherzustellen, dass die endgültige Variable einen bekannten Wert hat, muss ihr bei der Deklaration oder im Konstruktor ein Wert zugewiesen werden.
Leistung: Durch die Verwendung von final kann der Compiler den Code erfolgreicher optimieren und möglicherweise die Leistung verbessern.
Sicherheit: Final verbessert die Sicherheit von Java-Programmen, indem es unbefugte Änderungen an sensiblen Daten oder Verhaltensweisen verhindert.
In Java ist eine unveränderliche Klasse eine Klasse, deren Inhalt nach der Erstellung nicht mehr geändert werden kann. Um eine unveränderliche Klasse zu erstellen, befolgen Sie diese Anforderungen:
Deklarieren Sie Klassen als endgültig, um eine Vererbung zu verhindern.
Deklarieren Sie die Datenmitglieder einer Klasse als privat, um den direkten Zugriff einzuschränken.
Deklarieren Sie Datenelemente als endgültig, um Änderungen nach der Erstellung des Objekts zu verhindern.
Verwenden Sie parametrisierte Konstruktoren, um alle Felder per Deep Copy zu initialisieren und so Änderungen über Objektreferenzen zu verhindern.
Geben Sie eine Kopie (tiefe Kopie) des Objekts in der Getter-Methode anstelle der tatsächlichen Objektreferenz zurück, um die Unveränderlichkeit aufrechtzuerhalten.
Indem Sie diese Eigenschaften befolgen, können Sie Ihre eigenen unveränderlichen Klassen in Java erstellen, ähnlich den integrierten unveränderlichen Klassen wie Integer, Boolean, Byte, Short und String.
Bei der Java-Programmierung ist es wichtig, den Unterschied zwischen „endgültig“ und „unveränderlich“ zu verstehen.
Final: Objektreferenzen beibehalten und Statusmutationen zulassen
Beginnen wir mit „Final“. Wenn ein Objekt oder eine Variable in Java als endgültig markiert ist, bedeutet dies, dass die Referenz nicht so geändert werden kann, dass sie auf ein anderes Objekt oder eine andere Variable verweist, nachdem ihr ein Wert zugewiesen wurde. Es ist wichtig zu bedenken, dass die Referenz zwar fest ist, die Verwendung der zugehörigen Setter-Methode jedoch dennoch die Möglichkeit bietet, den Status des Objekts zu ändern. Auch wenn die Referenz selbst nicht geändert werden kann, können Sie dennoch zugängliche Methoden verwenden, um die internen Eigenschaften oder Eigenschaften des Objekts zu ändern. Mit anderen Worten stellt final die Stabilität einer Objektreferenz sicher und ermöglicht gleichzeitig Änderungen an seinem internen Zustand.
Unveränderlich: Unveränderliche Werte und Referenzflexibilität
Lassen Sie uns nun unsere Aufmerksamkeit auf „unveränderlich“ richten. In Java bedeutet Unveränderlichkeit, dass der tatsächliche Wert eines Objekts nach seiner Erstellung nicht mehr geändert werden kann. Im Gegensatz zu Final können Sie jedoch die Referenz selbst ändern und sie einem anderen Objekt oder einer anderen Variablen zuweisen. Das bedeutet, dass der Wert des Objekts zwar gleich bleibt, Sie jedoch seine Referenz ändern können, um auf eine andere Instanz zu verweisen.
Anwendung und Geltungsbereich: Endgültig und Unveränderlichkeit
Der Modifikator „final“ gilt für Variablen in Java und nicht für Objekte. Es betont die Einschränkungen beim Ändern von Referenzen oder Variablen und ermöglicht gleichzeitig die Änderung des Objektzustands. Unveränderlichkeit hingegen gilt für Objekte, was bedeutet, dass ihre Werte nach ihrer Erstellung nicht mehr geändert werden können. Es ist wichtig, den Unterschied zwischen diesen beiden Konzepten zu verstehen, um sicherzustellen, dass sich Java-Programme wie erwartet verhalten.
Bedeutung: Objektadresse und Zustandsvariabilität
Wenn wir ein Objekt oder eine Variable als endgültig deklarieren, erzwingen wir die Beständigkeit seiner Adresse. Mit anderen Worten: Die Referenz bleibt fixiert und verhindert Änderungen an der Position, auf die sie verweist. Im Gegensatz dazu betont die Unveränderlichkeit, dass der Zustand eines einmal erstellten Objekts nicht mehr geändert werden kann. Dies bedeutet, dass die internen Werte des Objekts nicht geändert werden können und somit seine Integrität und Konsistenz während der gesamten Programmausführung gewahrt bleibt.
Dieser Code demonstriert den Unterschied zwischen dem Schlüsselwort „final“ und der Unveränderlichkeit in Java. Das Schlüsselwort „final“ macht eine Variable konstant und verhindert eine Neuzuweisung, während Unveränderlichkeit bedeutet, dass das Objekt selbst nicht geändert werden kann.
Schritt 1: Deklarieren Sie die Variable „sb“ als letztes StringBuffer-Objekt mit dem Anfangswert „Hello“.
Schritt 2: Verwenden Sie die Methode append(), um „TP“ an das StringBuffer-Objekt anzuhängen, auf das „sb“ verweist.
Schritt 3: Drucken Sie den aktualisierten Wert von „sb“, also „HelloTP“.
Schritt 4: Versuch, das neue StringBuffer-Objekt der Variablen „sb“ neu zuzuweisen, was zu einem Fehler bei der Kompilierung führt.
Schritt 5: Geben Sie den Wert von „sb“ aus, aber aufgrund des Fehlers im vorherigen Schritt wird diese Zeile nicht ausgeführt.
// Java program to illustrate difference between final and immutability public class Tutorialspoint { public static void main(String[] args) { final StringBuffer sb = new StringBuffer("Hello"); // We can make changes even though reference variable sb is final sb.append("TP"); System.out.println(sb); // Compile time error will appear here. This is because the final variable cannot be reassigned sb = new StringBuffer("Hello World"); System.out.println(sb); } }
Tutorialspoint.java:16: error: cannot assign a value to final variable sb sb = new StringBuffer("Hello World"); ^ 1 error
Zusammenfassend lässt sich sagen, dass „Endgültigkeit“ und Unveränderlichkeit in Java sehr unterschiedliche Eigenschaften haben. Das Schlüsselwort „final“ schränkt die Neuzuweisung von Objektreferenzen ein, ermöglicht jedoch die Änderung des Objektstatus.
Im Gegensatz dazu verhindert die Unveränderlichkeit, dass sich der Wert eines Objekts ändert, ermöglicht aber die Neuzuweisung von Referenzen. Für die Entwicklung zuverlässiger Java-Programme ist es wichtig, die Anwendung und den Umfang von „Endgültigkeit“ und Unveränderlichkeit zu verstehen. Wenn ein Objekt oder eine Variable als endgültig deklariert wird, bleibt seine Adresse fest, während die Unveränderlichkeit sicherstellt, dass die internen Werte des Objekts nicht geändert werden können. Der Beispielcode zeigt den Unterschied, wobei „final“ eine Neuzuweisung verhindert, was zu einem Fehler bei der Kompilierung führt.
Das obige ist der detaillierte Inhalt vonEndgültiger Vergleich mit Unveränderlichkeit in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!