In PHP sind Strings unveränderlich. Dies bedeutet, dass der Wert einer Zeichenfolge nicht mehr geändert werden kann, sobald sie erstellt wurde. Wenn wir eine Zeichenfolge als Referenz übergeben, übergeben wir tatsächlich eine Kopie der Zeichenfolge und nicht die ursprüngliche Zeichenfolge selbst. Daher haben Änderungen an der Kopie keinen Einfluss auf den Wert der Originalzeichenfolge. Hierbei handelt es sich um einen von PHP entwickelten Schutzmechanismus, der die Unveränderlichkeit von Zeichenfolgen und die Sicherheit von Daten gewährleistet. Unabhängig davon, wie wir also versuchen, den Wert einer Zeichenfolge durch Referenz zu ändern, erstellen wir tatsächlich eine neue Zeichenfolge und weisen sie der Referenzvariablen zu, während der Wert der ursprünglichen Zeichenfolge unverändert bleibt.
Warum ändert der folgende Code nur den Wert des Arrays t
中的值,并且不更改字符串 s
? Ich habe erwartet, dass sich der String aufgrund seiner Objekteigenschaften auch ändern würde.
class A { private int i = 0; private String s = ""; private int[] t = new int[1]; void m() { B.m(i, s, t); } @Override public String toString() { return "i=" + i + ", s=" + s + ", t[0]=" + t[0]; } } class B{ public static void m(int i, String s, int[] t){ i += 1; s += "1"; t[0] += 1; } } public class Zad { public static void main( String [ ] args ){ A a = new A() ; System.out.println(a); a.m(); System.out.println(a); } }
Das passiert in Ihrem Code: Wenn Sie in Java einen primitiven Typ (wie int
) an eine Methode übergeben, übergeben Sie den Wert selbst. Alle Änderungen an Parametern innerhalb einer Methode wirken sich nicht auf die ursprünglichen Werte außerhalb der Methode aus. Dies wird als „Wertübergabe“ bezeichnet. Das wissen Sie wahrscheinlich schon.
Lokale Variablen in der Klasse b
的定义中,i
、s
和 t
是方法 m()
. Dies bedeutet, dass Änderungen an diesen Variablen keinen Einfluss auf die ursprünglichen Werte im aufrufenden Code haben.
Wenn Sie eine Instanzmethode a.m();
in der Hauptmethode aufrufen:
A a = new A(); System.out.println(a); // Output: i=0, s=, t[0]=0 a.m(); System.out.println(a); // Output: i=0, s=, t[0]=1
Sie werden sehen t[0]
的值已更改,因为 java 中的数组是对象,对其元素的修改会反映在方法外部。但是,i
和 s
的值保持不变,因为它们是原始类型或不可变对象(如 string
) und alle Änderungen, die innerhalb der Methode daran vorgenommen werden, sind lokal und haben keinen Einfluss auf den ursprünglichen Wert.
Das obige ist der detaillierte Inhalt vonWarum ändert ein als Referenz übergebener String seinen Wert nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!