个人理解(不考虑基本数据类型):
变量是含有对象引用的容器。
一个对象对应唯一一个引用。
一个变量存储一个引用。
一个对象可以存储一个或多个引用(变量)。
赋值是将引用存储到变量中。
如:
class A{ private String name; public setName(String name){ this.name=name; } }
在另一个测试类中:
A a=new A();
初始化后,对象产生,设对象的引用为“@isrw25”,赋值,使得变量a中存储对象的引用“@isrw25”。变量a可以通过“@isrw25”获取对象。
a.setName("theo");
字符串“theo”对象产生,它的引用也产生了,设为“@theo03”,将引用传给形参name变量存储。变量name可以通过“@theo03”获取对象“theo”。
进入set方法
public setName(String name){ this.name=name; }
赋值,使得变量this.
name中存储引用“@theo03”。对象被改变。
changeName1(a);
进入changeName1方法,形参a存储实参a的引用,即此时形参和实参指向同一个对象。
public changeName1(A a){ a.setName("tom"); }
字符串“tom”对象产生,它的引用也产生了,设为“@tom023”,将引用传给形参name变量存储。进入set方法。赋值,使得变量this.name存储引用“@tom023”。对象被改变。
changeName2(a);
进入changeName2方法,形参a存储实参a的引用,即此时形参和实参指向同一个对象。
public changeName2(A a){ A a2=new A(); a2.setName("Lin"); a=a2; }
初始化,产生一个不同于原对象的对象,它们是类A的两个不同实例。设先生成的A实例为前对象,changeName2方法中产生的A实例为后对象。后对象初始化后进入set方法,变量name存储字符串“Lin”的引用。后对象被改变。
a=a2;将a2的引用存储到a中,a指向的对象变为后对象,而不再是前对象了。所以前对象没有被改变。