public class Person{
public String name;
public Person(String name){ this.name=name;
}
public static void swap(Person p1,Person p2){
Person temp=p1;
p1=p2;
p2=temp;
System.out.println(p1.name+" "+p2.name);
}
public static void main(String[] args) {
Person person1= new Person("赵钱孙");
Person person2=new Person("周吴郑");
swap(person1,person2);
System.out.println(person1.name+" "+person2.name);
}
}
输出的结果为:周吴郑 赵钱孙
赵钱孙 周吴郑
person1和person2并没有改变;
若采用如下方式:
package com.wang;
public class Person{
public String name;
public Person(String name){ this.name=name;
}
public static void swap(Person p1,Person p2){
String temp=p1.name;
p1.name=p2.name;
p2.name=temp;
System.out.println(p1.name+" "+p2.name);
}
public static void main(String[] args) {
Person person1= new Person("赵钱孙");
Person person2=new Person("周吴郑");
swap(person1,person2);
System.out.println(person1.name+" "+person2.name);
}
}
输出的结果则为:周吴郑 赵钱孙
周吴郑 赵钱孙
证明了对象传递只是实参的地址的拷贝;操作传入对象内部的属性才会引起外部实参状态的改变
若不想改变外部的实参状态,那就用克隆 Person p3=(Person) person1.clone();
此方法会克隆下person1的属性,但若person属性中还有另一个对象;则依次进行深克隆;