class Name
{
private String firstName;
private String lastName; public Name(){} public Name(String firstName , String lastName)
{
this.firstName = firstName;
this.lastName = lastName;
} public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getFirstName()
{
return this.firstName;
} public void setLastName(String lastName)
{
this.lastName = lastName;
}
public String getLastName()
{
return this.lastName;
}}
public class Person
{
private final Name name; public Person(Name name)
{
//this.name = name;//我若在此把上下注释拿掉,输出地结果是 》》悟空 八戒//若不拿掉注释怎么输出的都是 悟空。————其中的原理有些许模糊,希望高手指点上下一二!谢谢。
this.name = new Name(name.getFirstName(), name.getLastName());
}
public Name getName()
{
//return name;
return new Name(name.getFirstName(), name.getLastName());
}
public static void main(String[] args)
{
Name n = new Name("悟空", "孙");
Person p = new Person(n);
System.out.println(p.getName().getFirstName());
n.setFirstName("八戒");
System.out.println(p.getName().getFirstName());
}
}
{
private String firstName;
private String lastName; public Name(){} public Name(String firstName , String lastName)
{
this.firstName = firstName;
this.lastName = lastName;
} public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getFirstName()
{
return this.firstName;
} public void setLastName(String lastName)
{
this.lastName = lastName;
}
public String getLastName()
{
return this.lastName;
}}
public class Person
{
private final Name name; public Person(Name name)
{
//this.name = name;//我若在此把上下注释拿掉,输出地结果是 》》悟空 八戒//若不拿掉注释怎么输出的都是 悟空。————其中的原理有些许模糊,希望高手指点上下一二!谢谢。
this.name = new Name(name.getFirstName(), name.getLastName());
}
public Name getName()
{
//return name;
return new Name(name.getFirstName(), name.getLastName());
}
public static void main(String[] args)
{
Name n = new Name("悟空", "孙");
Person p = new Person(n);
System.out.println(p.getName().getFirstName());
n.setFirstName("八戒");
System.out.println(p.getName().getFirstName());
}
}
而
this.name = new Name(name.getFirstName(), name.getLastName()) 虽然name变量指向新new出来的那个对象 但是这个对象 内的内容是 由传进来的name对象 确定的 所以会变化