在PHP中,字串是不可變的。這意味著一旦字串被創建,它的值就不能被改變。當我們透過引用傳遞一個字串時,實際上是傳遞了字串的副本而不是原始字串本身。因此,對副本的任何修改都不會影響原始字串的值。這是PHP設計的一種保護機制,以確保字串的不可變性和資料的安全性。因此,無論我們如何嘗試透過引用來修改字串的值,實際上是在創建一個新的字串並將其賦值給引用變量,而原始字串的值保持不變。
為什麼下面的程式碼只修改數組 t
中的值,並且不更改字串 s
的值?我預計 string 也會因其物件屬性而發生更改。
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); } }
這就是程式碼中發生的情況:在java 中,當您將基本類型(如int
)傳遞給方法時,您傳遞的是值本身。方法內對參數所做的任何修改都不會影響方法外的原始值。這稱為“按值傳遞”。這你可能已經知道了。
在類別b
的定義中,i
、s
和t
是方法m()
中的局部變數。這意味著,對這些變數所做的更改不會影響呼叫程式碼中的原始值。
當你在主方法中呼叫實例方法 a.m();
時:
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
您將看到 t[0]
的值已更改,因為 java 中的陣列是對象,對其元素的修改會反映在方法外部。但是,i
和s
的值保持不變,因為它們是原始類型或不可變物件(如string
),並且在方法內對它們所做的任何更改都是本地的,不會影響原始值。
以上是為什麼透過引用傳遞的 String 不會改變它的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!