传值的方式传引用。或者说传值的方式传地址。
问题其实很简单。要搞清楚这个问题,要明白:堆和栈。引用是保存在栈上,对象是保存在堆中。
引用指向堆上的对象,也就是说引用的值为对象在栈上的内存地址。那么你修改引用时改的是引用的值,也就是让引用指向其它对象。那么应该怎么修改堆上的对象呢?
首先你得访问到堆上的对象吧?如何访问到它呢?
在C/C++中是通过指针运算符*p来访问到指针p指向的堆上的对象的,然后再修改它。
那么Java中没有指针运算符,那么怎么办呢? Java中是通过点操作符,也就是 list.add中的那个点,表示先访问到list这个引用指向的对象,然后让该对象调用add方法,从而修改了list指向的堆上的对象。
所以当你单独修改 list = xxx;时你修改的是引用,让list引用指向其它对象,而没有修改 list引用指向的对象,因为你根本就没有访问到堆上的对象,你怎么修改它呢?
所以:要修改堆上的对象,你要先访问到它,不然你就不能修改它。访问堆上的对象的方法就是.点操作符。
Was this helpful?
0 / 0