围绕这段代码
public class ObjectTest
{
public void changeName(Person person,Person person2)
{
person.name = "xiaohong";
person2.name = "xiaogang";
}
public static void main(String[] args)
{
Person person = new Person();
person.name = "xiaoming";
Person person2 = person;
ObjectTest ot = new ObjectTest();
ot.changeName(person,person2);
System.out.println(person.name);
}
}
class Person
{
String name;
}
从main开始看,
Person person = new Person();
person.name = "xiaoming";
创建了一个Person类型的引用person,指向一个Person对象,这个对象的name属性为xiaoming
Person person2 = person;
创建了一个Person类型的引用person2,person2的值等于person,即两个引用指向同一个对象
ObjectTest ot = new ObjectTest();
ot.changeName(person,person2);
调用ObjectTest类的changeName方法,将person和person2的值传入方法,那么两个参数引用都将指向同一个Person对象
person.name = "xiaohong";
person2.name = "xiaogang";
按照顺序,参数person指向Person对象,将对象的name属性改成xiaohong;参数person2也指向Person对象,将对象的name属性又改成xiaogang
最终四个引用都指向同一个对象,对象的name属性为xiaogang,输出main中的person.name为xiaogang
如果将
Person person2 = person;
改为
Person person2 = new Person();
就会是这样
调用方法后,参数person的值为main person的值,指向第一个Person对象
参数person2的值为main person2的值,指向第二个Person对象
经过changeName方法变化后,参数person指向的对象name属性变为xiaohong,参数person2指向的对象name变为xiaogang,最终结果如下图
最终输出main中的person.name属性,及xiaohong