java 物件傳入到函式原物件不改變 值傳遞 引用傳遞
阿新 • • 發佈:2019-01-02
背景: 做專案的時候,將一個空物件的引用傳入到方法中,期待方法裡面建立一個新的物件給這個引用,後面就可以拿著這個物件用了。
可結果就是,定義在外面的物件引用並沒有拿到這個引用
demo.java
public class Entry { public static void main(String[] args) { List<String> re = new ArrayList<>();
// initial 一個物件,期望這個物件經過函式能引用到新的物件 TestObject test=new TestObject("1","2"); addObject(test); System.out.println(test.hashCode()); }
// 希望這個函式能將test引用到新的物件 public static void addObject(TestObject object) { System.out.println(object.hashCode()); object = new TestObject("2", "4"); System.out.println(object.hashCode()); object.setId("100"); } }
執行結果如下:
1259475182 1300109446 1259475182
可以看到進入到函式裡面之後,test這個引用變成了區域性變數,不會影響到全域性變數test,一旦出了函式還是test,並沒有引用到新的物件。
進入到函式之後test引用到新物件沒問題,出去之後test還是老得物件,但是java不是傳遞物件引用關係麼;實際都是值傳遞,物件看著像
引用傳遞,實際傳的是物件的地址,像c++一樣,對地址修改影響到原來值;如果對傳入函式的物件引用引數賦值,那麼也是把一個物件的引用
賦值給了一個地址變數,在java中,變數傳入到函式引數是變數的一份拷貝,並不會影響到原來的值的。
經常使用的是把物件傳入到一個function,對這個物件內容修改,修改引用這個基本沒有用過,