Der string
Typ ist unveränderlich.
Wir können das const
Schlüsselwort mit strings
in einer Hochsprache wie .NET verwenden. Mein Verständnis von 'const' bedeutet konstant (es bleibt gleich, wir können den Wert nicht ändern).
Sind strings
nicht immer constant
(IMO sollte der Begriff constant
nicht im selben Kontext anwendbar sein, wenn der Typ jedes Mal neu erstellt werden muss, wenn er für die Werte Lebensdauer bedeutet, dass er konstant war)?
Liegt dies in Hochsprachen, insbesondere in .NET (obwohl ich mich auch für Java interessieren würde) an der allgemeinen Speicherverwaltung / -verfolgung von Objekten oder gibt es einen anderen Grund?
strings
immutability
Dave
quelle
quelle
final
Modifikator einer Zeichenfolgenvariablen, dass die Variable so geändert wird, dass sie auf eine andere Zeichenfolge verweist .Antworten:
Sie verwechseln zwei verschiedene Dinge:
Unveränderlich bedeutet, dass der Speicherinhalt des Objekts nicht geändert werden kann. Wenn Sie ein unveränderliches Objekt (z. B. a
string
) ändern , wird der Speicherinhalt dieses Objekts nicht geändert. Stattdessen:Konstante bedeutet, dass die Variable zur Kompilierungszeit nicht geändert werden kann. Ob ein
string
oder eininteger
Inhalt der Variablen (oder worauf sie verweist) kann beim Kompilieren nicht geändert oder zugewiesen werden.quelle
const
, können Sie es nicht ändern. Sie können es einem Anfangswert definieren, aber Sie können ihm nirgendwo anders einen anderen Wert zuweisen, sodass Sie ihn nicht ändern können.Wie die Kommentare sagen, verwechseln Sie "konstant" mit "unveränderlich", wenn sie wirklich zwei sehr unterschiedliche Dinge bedeuten.
Eine Konstante ist eine Variable , die nicht geändert werden kann. Abhängig von der Sprache und dem Compiler ist es durchaus möglich, dass kompilierter Code einfach jede Verwendung dieser Variablen durch den ihr zugewiesenen Wert ersetzt. In diesem Fall würde ihm niemals ein Speicherplatz zugewiesen. Auch wenn der Compiler nicht auf diese Weise optimiert, wird ihm beim Start (wie
const
impliziertstatic
) immer noch ein Speicherplatz zugewiesen und bleibt dort bis zum Beenden.Ein unveränderlicher Wert ist ein Wert im Speicher , der nicht geändert werden kann (bis der Speicher wiederhergestellt ist). Es wird nach Bedarf ein Speicherplatz zugewiesen und kann (theoretisch) in mehreren Variablen gespeichert werden. Das Zuweisen zu einer Variablen, die auf einen unveränderlichen Wert zeigt, erstellt einfach eine neue unveränderliche und ändert die Variable so, dass sie stattdessen darauf zeigt. Der alte Wert bleibt bis zur Speicherbereinigung im Speicher, was auch während der Ausführung des Programms passieren kann.
quelle
Saiten können sich nicht ändern. Zeiger auf Zeichenfolgen können sich ändern. Folgendes ist gültiger Code:
Das ursprüngliche "Text" -Objekt ist noch vorhanden, unverändert und unveränderlich, außer dass nichts mehr darauf hinweist. Mit einer veränderlichen Variable
String
können Sie darauftext.substring(1)
verzichten, sie dertext
Variablen wieder zuweisen zu müssen , und das ursprüngliche Objekt wird geändert. Wenn Sie möchten , dass sich die Variabletext
nicht ändert, machen Sie sie zu einerconst
. Für beide gibt es gültige Anwendungsfälle.Nebenbei bemerkt ist dies ein gutes Beispiel für ein Konzept, das in C ++ leichter zu verstehen ist, da Objekte und Zeiger auf Objekte unterschiedliche Typen haben.
quelle
Ich glaube, dass Sie Variablen und Objekte verwirren.
Eine Variable ist einfach eine Referenz auf ein Objekt .
Während Ihr Programm ausgeführt wird, kann eine Variable auf mehrere Objekte verweisen . Wenn Sie der Variablen etwas zuweisen, wird das Objekt nicht geändert. Wenn es keine Variablen gibt, die auf ein Objekt verweisen, wird es zu Müll.
A
String
wird als unveränderlich angesehen (in Java, und ich würde es auch in .Net erwarten), da es keine Möglichkeit gibt, das Objekt zu ändern .Eine Konstante ist einfach eine Variable, die sich während der Laufzeit des Programms nicht ändern darf. Sie definieren eine Konstante mit dem
final
Modifikator in Java und demconst
Modifikator in .Net.Wenn Ihre "konstante" Variable jedoch auf ein veränderliches Objekt verweist, wirkt sich die "Konstanz" der Variablen nicht auf die Veränderlichkeit des Objekts aus (tatsächlich kann ich das in .Net nicht mit Sicherheit sagen, da ich davon ausgehe erbt einige der arkanen Regeln von C ++).
quelle
Eine einfache Demonstration dessen, was
const
begleitet. Dies gilt für C # und ähnliche Sprachen.quelle
const
sich das Verhalten verhält, ist jedoch nicht eindeutigconst
. In Javafinal
verhält sich das Schlüsselwort ähnlich und in C # macht dasreadonly
Schlüsselwort dasselbe. Das Einzigartige an aconst
ist, dass es zur Kompilierungszeit bekannt ist.