java 对象传入到函数原对象不改变

demo.java

public class Entry
{
    public static void main(String[] args)
    {
        List 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,对这个对象内容修改,修改引用这个基本没有用过。

你可能感兴趣的:(java 对象传入到函数原对象不改变)