13 Stimmen

Konstantes Objekt vs. unveränderliches Objekt

Kann ich den Begriff "Constant Object" anstelle des Begriffs "Immutable Object" verwenden? Ich habe zwar das Gefühl, dass "Immutable" für ein Objekt das ist, was "Constant" für eine Variable ist, aber ich bin mir nicht sicher, ob diese Terminologie akzeptiert wird. Bitte helfen Sie mir zu verstehen.

Danke! Karthick S.

16voto

Paŭlo Ebermann Punkte 70779

In der Tat ist in Java der Begriff Konstante hat keine definierte Bedeutung. Er kommt in der JLS nur in dem größeren Begriff Kompilierzeit konstanter Ausdruck ist ein Ausdruck, der vom Compiler und nicht zur Laufzeit berechnet werden kann (und muss). (Und das Schlüsselwort const ist reserviert, damit die Compiler bessere Fehlermeldungen ausgeben können).

In Java verwenden wir stattdessen den Begriff endgültig um auf Variablen zu verweisen (ob Klassen-, Objekt- oder lokale Variablen), die nicht geändert werden können, und unveränderlich wenn wir uns auf Objekte beziehen, die sich nicht verändern können. Beide können verwendet werden, wenn man über eine Variable spricht x - das erste bedeutet dann die Variable selbst (d.h. sie kann nicht auf ein anderes Objekt umgeschaltet werden), das zweite bedeutet das Objekt hinter der Variablen. Hier sind die beiden Bedeutungen also orthogonal und werden oft kombiniert, um eine "echte Konstante" .

7voto

Brian Agnew Punkte 260470

Ich würde lesen Konstante als ein und dasselbe Objekt (dieselbe Referenz), während unveränderlich bedeutet für mich eindeutig, dass sich das Objekt nicht verändert.

Da es sich um zwei verschiedene Dinge handelt, würde ich vielleicht darauf verweisen:

private final Immutable i = new Immutable();

als ein konstantes, unveränderliches Objekt.

2voto

wds Punkte 30993

Eine Konstante hat in verschiedenen Programmiersprachen oft eine ganz bestimmte Bedeutung. In Java bezieht sich eine Konstante bereits auf eine konstante Variable, eine Variable, die nach der Zuweisung nicht mehr verändert werden kann, z. B.:

final int FOO = 1;
FOO = 4; // constant variable cannot be changed.

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, trotzdem geändert werden. Um Verwirrung zu vermeiden, wird daher der Begriff "unveränderlich" (was wörtlich "zeitlich unveränderlich" bedeutet) verwendet.

1voto

Edwin Buck Punkte 67237

Ihre Bedeutung ist sehr ähnlich, wobei ein Object Methoden enthält, während eine Constant im Allgemeinen nur Daten enthält.

In Java gibt es die zusätzliche Berücksichtigung des Schlüsselworts final was im Wesentlichen bedeutet, dass sie nicht neu zugewiesen werden können. Manche Leute nennen eine finale Variable beiläufig eine Konstante (da ihr Verweis auf ein bestimmtes Objekt eine Konstante ist). Dies geschieht oft aufgrund von Verwirrung hinsichtlich der besonderen Rolle des Mitglieds und des Objekts, auf das es sich bezieht, da 95% der Zeit eine Person dies tut, um sich auf ein unveränderliches Objekt zu beziehen.

Nicht jede Methode soll Daten zurückgeben, die vollständig von den internen Mitgliedern abhängen. Zum Beispiel System.currentTimeMillis() gibt einen Unix-ähnlichen Zeitstempel zurück, ohne dass sich das eigentliche "System"-Objekt ändern müsste.

-2voto

S M Kamran Punkte 4258

Unveränderlichkeit des Objekts bedeutet, dass es seinen Zustand nicht verändern kann... d.h. nicht mutieren kann... Zum Beispiel

final class Person {
  private int age = 0;

  public Person(int age) { this.age = age; }
}

Die Objekte dieses Typs sind unveränderliche Objekte, da man ihren Zustand nicht ändern kann.... (vergessen Sie Reflection für einen Moment)

Konstante auf der anderen Seite in der Programmierung bedeutet Inline... Auch der Compiler tut, dass sie die Werte der konstanten Variablen für primative Typen inline... für Objekttypen bedeutet es die ref-Variable kann nicht neu zugewiesen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X