Heim >Java >javaLernprogramm >Ist String in Java veränderbar? (ausführliche Beispiele)
Der Inhalt dieses Artikels befasst sich mit der Frage, ob String in Java veränderbar ist. (Ausführliche Erläuterung der Beispiele) hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
Wir alle wissen, dass die String-Klasse in Java unveränderlich ist. Werfen wir einen Blick auf den Quellcode der String-Klasse.
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 // ... }
Es ist ersichtlich, dass die String-Klasse vom endgültigen Typ ist und String nicht vererbt werden kann. Sein Wert ist die Kapselung des Zeichenarrays, also char[]. Sein Wert ist als privates Finale definiert, was bedeutet, dass er von der Außenwelt nicht geändert werden kann, also unveränderlich ist.
Sehen Sie sich das Beispiel unten an.
String str = "Python"; System.out.println(str); // Python str = "Java"; System.out.println(str); // Java str = str.substring(1); System.out.println(str); // ava
Sie fragen sich vielleicht: Ist str nicht von Python auf Java umgestiegen? Dann wird es durch die Teilstring-Methode zu ava?
Dies ist eigentlich ein Missverständnis unter Anfängern. Wenn wir uns die Struktur von String oben ansehen, können wir erkennen, dass Strings nur ein Verweis auf „Python“ sind. , wurde später zu „Java“, und die Teilzeichenfolge verwendet auch die Methode Arrays.copyOfRange, um das Zeichenarray erneut zu kopieren und eine neue Zeichenfolge zu erstellen.
Die Zeichenfolge hier ist also nicht variabel, sie ändert lediglich die Zeichenfolgenreferenz.
Informationen zu den Unterschieden zwischen Teilstrings in verschiedenen JDK-Versionen finden Sie in diesem Artikel „Hinweis: Unterschiede in den String-Teilstring-Methoden in jkd6, 7 und 8“. Sie können sich auch den jeweiligen Quellcode ansehen Version des Teilstrings.
Das obige Beispiel ist definitiv unveränderlich, aber das folgende ist peinlich.
String str = "Hello Python"; System.out.println(str); // Hello Python Field field = String.class.getDeclaredField("value"); field.setAccessible(true); char[] value = (char[])field.get(str); value[6] = 'J'; value[7] = 'a'; value[8] = 'v'; value[9] = 'a'; value[10] = '!'; value[11] = '!'; System.out.println(str); // Hello Java!!
Durch Reflexion ändern wir den Wert des zugrunde liegenden Zeichenarrays und erkennen die „Unveränderlichkeit“ der Zeichenfolge. Dies ist eine raffinierte Operation und wird nicht empfohlen. Sie verstößt gegen die Anforderungen von Java an die String-Klasse Das Designprinzip kann einige Sicherheitsprobleme verursachen.
Das obige ist der detaillierte Inhalt vonIst String in Java veränderbar? (ausführliche Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!