本文通过代码来验证,使用类生成的对象作为参数传递时,传递的是引用
即新生成一个对象,把它作为传递的参数,不会生成额外的对象,全程使用的是该对象
如下所示,为一个Person类
public class Person implements Serializable {
private static final long serialVersionUID = 5271192200089583565L;
private String name;
private int age;
public Person() {
System.out.println("Peron");
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后用两个类分别封装它
class Objector1 {
private Person person;
Objector1() {
}
Objector1(Person person) {
this.person = person;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
class Objector2 {
private Person person;
Objector2() {
}
Objector2(Person person) {
this.person = person;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
测试程序如下,如果以下输出的地址均一样,表示没有额外生成对象,全程仅仅操作一份内存
public class FirstApplication {
public static void main(String[] args) throws Exception {
Person person = new Person();
System.out.println("Person : " + person);
Objector1 objector1 = new Objector1(person);
System.out.println("Objector1 : " + objector1.getPerson());
Objector2 objector2 = new Objector2();
objector2.setPerson(objector1.getPerson());
System.out.println("Objector2 : " + objector2.getPerson());
}
}
测试结果如下所示,地址均相同
Person : Objector.Person@45ee12a7
Objector1 : Objector.Person@45ee12a7
Objector2 : Objector.Person@45ee12a7