1. 程式人生 > >java 物件傳入到函式原物件不改變 值傳遞 引用傳遞

java 物件傳入到函式原物件不改變 值傳遞 引用傳遞

背景: 做專案的時候,將一個空物件的引用傳入到方法中,期待方法裡面建立一個新的物件給這個引用,後面就可以拿著這個物件用了。

  可結果就是,定義在外面的物件引用並沒有拿到這個引用

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,對這個物件內容修改,修改引用這個基本沒有用過,