Warum String in Java unveränderlich oder endgültig ist [duplizieren]

7

Wie mir gesagt wurde, ist dies eine wichtige String Interview Frage in Java, die mit der Diskussion von "What is String" beginnt, wie String in Java anders ist als in C oder C ++ und dann nach unveränderlichen Objekten gefragt wird fragte die Hauptfrage: "Warum String in Java unveränderlich oder endgültig ist".

Können Sie Ihre Ideen teilen?

Vielen Dank im Voraus.

    
Jilberta 12.04.2013, 09:30
quelle

3 Antworten

26

Es ist hauptsächlich aus Sicherheitsgründen . String wird als Parameter in der Netzwerkverbindung, der Datenbank-URL usw. verwendet. Er kann leicht angegriffen werden, wenn er veränderbar ist.

Die Unveränderbarkeit von String löst einige Synchronisierungs Probleme, es macht den String thread sicher

Zur Unterstützung der Funktion StringPool

Zu cache die hashcode von String

Um Klassenlademechanismus zu unterstützen, in dem String als Argumente verwendet wird. String, der veränderbar ist, führt dazu, dass eine falsche Klasse geladen wird

    
Mohan Raj B 12.04.2013, 09:43
quelle
8

Die beiden Hauptgründe, warum Strings in vielen modernen Sprachen, einschließlich Java, unveränderbar sind, sind Sicherheit und Performance (genauer gesagt die Chance für Optimierungen).

Die Tatsache, dass Strings final sind, soll ihre Unveränderlichkeit sicherstellen (indem man es niemandem erlaubt, sie zu erweitern und wieder veränderbar zu machen).

    
quelle
8

Der wichtigste Grund ist Sicherheit .

Viele Sicherheitsrisiken würden auftreten, wenn ein bösartiger Thread einen Verweis auf eine veränderbare Zeichenfolge erhalten könnte, die gerade in eine Methode übergeben wird, die die Zeichenfolge validieren muss, bevor eine wichtige Operation ausgeführt wird. Es wäre möglich, dass der Thread die Zeichenfolge nach der Validierung ändert, und dann wird die Operation mit einem gefährlichen String ausgeführt.

Ein weiterer Grund für die Unveränderbarkeit von String in Java ist , damit String seinen Hashcode zwischenspeichern kann

Wie oben erwähnt - der wichtigste Grund - Sicherheit & amp; Fadensicherheit .

Stellen Sie sich ein Szenario vor, in einer Bankanwendung für die Überweisung - die Kontonummer des Empfängers wird in einer Zeichenfolge als "0789567345" definiert. Wenn aus Versehen / vorsätzlich dies gem. Nummer wird geändert, Geld wird auf ein falsches Konto gehen.

Ein anderes Szenario - wenn jemand den Klassennamen irgendwo zwischen der Verarbeitung als ... ändert.

%Vor%

Der Class Loader sagt einfach 'Class Not Found

    
Nomesh Gajare 12.04.2013 09:47
quelle

Tags und Links