先来运行下面的程序:
public class Address {
String city;
String street;
/**邮编*/
String zipcode;
}
public class User {
int id;
String username;
Address addr;
}
public class Test {
public static void main(String[] args) {
/**家庭地址对象*/
Address a = new Address();
a.city = "北京";
a.street = "大兴区";
a.zipcode = "121221";
/**用户对象*/
User u = new User();
System.out.println(u.id);
System.out.println(u.username);
System.out.println(u.addr);
u.id = 11111;
u.username = "zhangsan";
u.addr = a;
System.out.println("----------1----------");
System.out.println(u.username);
System.out.println("----------2----------");
System.out.println(u.username + "的城市是" + u.addr.city);
System.out.println("----------3----------");
Address temp = u.addr;
System.out.println(u.username + "的城市是" + temp.city);
}
}
运行结果:
分析:
(1)
创建了一个Address类型的对象。因为Address类型都是String,所以默认值都为null,并且把引用赋给
变量a。
(2)
给新创建的对象赋值。
(3)
又创建一个新的对象,但类型为User,输出结果,并且赋初值后再一次输出结果。如程序结果1。结合图
注意程序
u.addr = a;
该程序中的a是对Address类型的一个对象的引用,而addr是Address类型的,相当于将Address类型的一个对象的地址赋值给u.addr,类似于u.addr = x0123(当然这个地址只是我个人为了方便讲述编的)。大家如果不明白,可以比较上面程序的2,3段,或者可以回想一下学过的程序 int i = 5。原理类似的。
so easy!