java String 值傳遞 還是引用傳遞
阿新 • • 發佈:2019-01-05
值傳遞與引用傳遞
最近學基礎的時候,老師講了值傳遞和引用傳遞,這個問題一直不太明白,上網查了很多資料,按照自己的理解整理了一遍,發現之前不太明白的地方基本上想明白了,如有不正確的地方,歡迎指正,謝謝。
首先要說明的是java中是沒有指標的,java中只存在值傳遞,只存在值傳遞!!! 然而我們經常看到對於物件(陣列,類,介面)的傳遞似乎有點像引用傳遞,可以改變物件中某個屬性的值。但是不要被這個假象所矇蔽,實際上這個傳入函式的值是物件引用的拷貝,即傳遞的是引用的地址值,所以還是按值傳遞。
值傳遞
示例:
public class Test { public staticvoid changeStri(int a){ a=50; } public static void main(String[] args) { int a=10; System.out.println(a); change(a); System.out.println(a); } }
很顯然輸出的 是10,10。傳遞的是值得一份拷貝,這份拷貝與原來的值沒什麼關係。
記憶體分析:
引用傳遞
示例:
public class Test {public static void changeString(int []a){ a[0]=5; } public static void main(String[] args) { int []a={10,20}; System.out.println(a[0]);
changeString(a);System.out.println(a[0]); }}
顯然輸出結果為10 5。實際傳遞的是引用的地址值。
記憶體分析:
示例:
class Emp {public int age; } public class Test { public static void change(Emp emp) { emp.age = 50; emp = new Emp();//再建立一個物件 emp.age=100; } public static void main(String[] args) { Emp emp = new Emp(); emp.age = 100; System.out.println(emp.age); change(emp); System.out.println(emp.age); System.out.println(emp.age); } }
輸出為:100 50 50.
記憶體分析:
好的來總結下:
對於String String的變數是通過指向記憶體中的一個String物件,呼叫方法時請注意這裡是新建了一個String變數的拷貝 並不是String變數本身
注:如有不正確的地方歡迎指正,謝謝