Warum ist String in Java unveränderlich? String ist eine der am häufigsten verwendeten Klassen in jeder Programmiersprache. Wir wissen, dass String in Java unveränderlich und final ist. Die Java-Runtime verwaltet einen String-Pool, der es zu einer speziellen Klasse macht.
Warum ist String in Java unveränderlich?
Schauen wir uns einige der Vorteile der Unveränderlichkeit von String an, die dabei helfen werden zu verstehen, warum String in Java unveränderlich ist.
- Der String-Pool ist nur möglich, weil String in Java unveränderlich ist. Auf diese Weise spart die Java-Runtime viel Heap-Speicher, da verschiedene String-Variablen auf dieselbe String-Variable im Pool verweisen können. Wenn String nicht unveränderlich gewesen wäre, wäre String-Internierung nicht möglich gewesen, weil jede Änderung an einer Variable sich auch in anderen Variablen widerspiegeln würde.
- Wenn String nicht unveränderlich ist, würde dies eine ernsthafte Sicherheitsbedrohung für die Anwendung verursachen. Zum Beispiel werden Datenbankbenutzername und Passwort als String übergeben, um eine Datenbankverbindung zu erhalten, und in der Socket-Programmierung werden Host- und Portdetails als String übergeben. Da String unveränderlich ist, kann sein Wert nicht geändert werden, sonst könnte ein Hacker den referenzierten Wert ändern, um Sicherheitsprobleme in der Anwendung zu verursachen.
- Da String unveränderlich ist, ist er für Multithreading sicher. Eine einzelne String-Instanz kann von verschiedenen Threads gemeinsam genutzt werden. Dies vermeidet die Verwendung von Synchronisation für die Thread-Sicherheit. Strings sind implizit threadsicher.
- Strings werden im Java-Classloader verwendet und die Unveränderlichkeit gewährleistet, dass die richtige Klasse vom Classloader geladen wird. Denken Sie zum Beispiel an eine Situation, in der Sie versuchen, die Klasse
java.sql.Connection
zu laden, aber der referenzierte Wert auf die Klassemyhacked.Connection
geändert wird, die unerwünschte Dinge mit Ihrer Datenbank tun kann. - Da String unveränderlich ist, wird sein Hashcode zum Zeitpunkt der Erstellung zwischengespeichert und muss nicht erneut berechnet werden. Dies macht ihn zu einem hervorragenden Kandidaten für den Schlüssel in einer Map, und seine Verarbeitung ist schneller als bei anderen HashMap-Schlüsselobjekten. Deshalb wird String am häufigsten als HashMap-Schlüssel verwendet.
Oben sind einige der Gründe, die ich mir vorstellen kann, die die Vorteile der Unveränderlichkeit von Zeichenketten zeigen. Es ist eine großartige Funktion der Java String-Klasse und macht sie besonders. Lesen Sie diesen Beitrag, um zu erfahren, wie Sie Ihre eigene unveränderliche Klasse schreiben können.
Sie können weitere Java String-Beispiele aus unserem GitHub-Repository überprüfen.
Source:
https://www.digitalocean.com/community/tutorials/string-immutable-final-java