Kann ich den Begriff "Konstantes Objekt" anstelle des Begriffs "Unveränderliches Objekt" verwenden? Obwohl ich das Gefühl habe, dass Unveränderlich für ein Objekt ist, was Konstante für eine Variable ist, bin ich nicht sicher, ob diese Terminologie akzeptiert wird. Bitte hilf mir zu verstehen.
Danke, Karthick S.
Tatsächlich hat der Begriff Konstante in Java keine definierte Bedeutung. Es tritt in der JLS nur in dem größeren Term zeitkonstanten Ausdruck kompilieren auf, was ein Ausdruck ist, der vom Compiler anstatt zur Laufzeit berechnet werden kann (und muss). (Und das Schlüsselwort const
ist reserviert, damit Compiler bessere Fehlermeldungen ausgeben können.)
In Java verwenden wir stattdessen den Begriff final , um auf Variablen (ob Klasse, Objekt oder lokal) zu verweisen, die nicht geändert werden können, und unveränderlich , wenn wir verweist auf Objekte, die sich nicht ändern können. Beide können verwendet werden, wenn über eine Variable x
gesprochen wird - die erste bedeutet dann die Variable selbst (dh sie kann nicht auf ein anderes Objekt umgeschaltet werden), die zweite bedeutet das Objekt hinter der Variablen. Daher sind die beiden Bedeutungen hier orthogonal und werden oft kombiniert, um eine "wahre Konstante" zu erzeugen.
Ich würde Konstante als dasselbe Objekt (dieselbe Referenz) lesen, während unveränderlich für mich eindeutig bedeutet, dass sich das Objekt nicht ändert.
Da dies zwei verschiedene Dinge sind, würde ich mich vielleicht darauf beziehen:
%Vor%als ein konstantes unveränderliches Objekt.
Sie sind sehr nahe an der Bedeutung, mit dem Verständnis, dass ein Objekt Methoden enthält, während eine Konstante im Allgemeinen nur Daten enthält.
Innerhalb von Java gibt es die zusätzliche Berücksichtigung des Schlüsselwortes final
, was im Grunde nicht zuweisbar ist. Manche Leute nennen eine letzte Variable zufällig eine Konstante (da es sich bei der Referenz auf ein bestimmtes Objekt um eine Konstante handelt. Dies geschieht oft aufgrund von Unklarheiten bezüglich der besonderen Rollen des Mitglieds und des Objekts, auf das es sich bezieht, in 95% der Fälle eine Person tut dies, um sich auf ein unveränderliches Objekt zu beziehen.
Nicht jede Methode gibt Daten zurück, die vollständig von den internen Mitgliedern abhängen. Zum Beispiel gibt System.currentTimeMillis()
einen Unix-ähnlichen Zeitstempel zurück, aber das eigentliche "System" -Objekt müsste nicht geändert werden.
Konstante hat oft eine sehr spezifische Bedeutung in verschiedenen Programmiersprachen. In Java bezieht sich eine Konstante bereits auf eine konstante Variable, eine Variable, die nach der Zuweisung nicht geändert werden kann, z. B .:
%Vor%Ein unveränderliches Objekt ist ein konstantes Objekt in dem Sinne, dass seine Eigenschaften niemals geändert werden können, aber natürlich kann ein Objekt, auf das eine konstante Variable zeigt, noch geändert werden. Um Verwirrung zu vermeiden, wird daher der Begriff unveränderlich (was wörtlich "unveränderlich im Laufe der Zeit" bedeutet) verwendet.
Unveränderlichkeit des Objekts bedeutet, dass es seinen Zustand nicht transformieren kann ... d. h. nicht mutieren kann ... Zum Beispiel
%Vor%Das Objekt dieses Typs sind unveränderliche Objekte, da Sie seinen Zustand nicht ändern können. (Vergessen Sie die Reflektion für einen Moment)
Die Konstante andererseits bedeutet in der Programmierung inline ... Sogar der Compiler bewirkt, dass sie die Werte der Konstantenvariablen für primative Typen einfließen lassen ... für Objekttypen bedeutet dies, dass die ref-Variable nicht neu zugewiesen werden kann.
Tags und Links java immutability