Wie oben erwähnt, ist nicht modifizierbar nicht unveränderlich, da eine nicht modifizierbare Sammlung geändert werden kann, wenn beispielsweise einer nicht modifizierbaren Sammlung eine zugrunde liegende Delegatensammlung vorliegt, auf die von einem anderen Objekt verwiesen wird, und dieses Objekt sie ändert.
In Bezug auf unveränderliche ist es nicht einmal gut definiert. Im Allgemeinen bedeutet dies jedoch, dass sich das Objekt "nicht ändert", dies jedoch rekursiv definiert werden müsste. Zum Beispiel kann ich unveränderliche Klassen definieren, deren Instanzvariablen alle Grundelemente sind und deren Methoden alle keine Argumente enthalten und Grundelemente zurückgeben. Die Methoden ermöglichen dann rekursiv, dass die Instanzvariablen unveränderlich sind und alle Methoden Argumente enthalten, die unveränderlich sind und unveränderliche Werte zurückgeben. Es sollte garantiert werden, dass die Methoden im Laufe der Zeit denselben Wert zurückgeben.
Vorausgesetzt, wir können das, gibt es auch das Konzept Thread sicher. Und Sie könnten glauben gemacht werden, dass unveränderlich (oder nicht changeble im Laufe der Zeit) auch Thread-sicher impliziert. Dies ist jedoch nicht der Fallund das ist der Hauptpunkt, den ich hier mache, der in anderen Antworten noch nicht erwähnt wurde. Ich kann ein unveränderliches Objekt erstellen, das immer die gleichen Ergebnisse zurückgibt, jedoch nicht threadsicher ist. Um dies zu sehen, nehme ich an, dass ich eine unveränderliche Sammlung erstelle, indem ich im Laufe der Zeit Hinzufügungen und Löschungen behalte. Jetzt gibt die unveränderliche Sammlung ihre Elemente zurück, indem sie sich die interne Sammlung ansieht (die sich im Laufe der Zeit ändern kann) und dann (intern) die Elemente hinzufügt und löscht, die nach dem Erstellen der Sammlung hinzugefügt oder gelöscht wurden. Obwohl die Sammlung immer dieselben Elemente zurückgibt, ist sie natürlich nicht threadsicher, nur weil sie den Wert niemals ändert.
Jetzt können wir unveränderlich als Objekte definieren, die threadsicher sind und sich niemals ändern werden. Es gibt Richtlinien zum Erstellen unveränderlicher Klassen, die im Allgemeinen zu solchen Klassen führen. Beachten Sie jedoch, dass es Möglichkeiten gibt, unveränderliche Klassen zu erstellen, bei denen beispielsweise die Thread-Sicherheit berücksichtigt werden muss, wie im obigen Beispiel für die Sammlung "Snapshot" beschrieben.