Hollis大佬回答
先给出答案,java中只有值传递,没有引用传递
首先对于普通类型(int、long等)大家都可以很轻易的理解,因为传参是会拷贝一份,所以函数中不管如何修改都是不影响外部变量的值,因此普通类型一定是传值的。
那么对于对象呢,大家都知道java对象是建立在堆之上,new出来的对象返回值是堆地址,那么当传递的时候,函数还是会将实参拷贝一份,那么拷贝的内容是什么?拷贝的就是地址,因为是对象的地址,因此你可以修改对象的内容。但是当你的对象发生不是值修改而是地址修改的时候,这个时候拷贝的参数就影响不到实参的内容。因此,java对象只有值拷贝。
引用传递和值传递的区别究竟是什么?
值传递和引用传递的区别并不是传递的内容。而是实参到底有没有被复制一份给形参。在判断实参内容有没有受影响的时候,要看传的的是什么,如果你传递的是个地址,那么就看这个地址的变化会不会有影响,而不是看地址指向的对象的变化。