传值和传引用:传值:直接传基本类型数据;传引用(传地址):对象与对象之间传递值
int date = 9;
BirthDate d1 = new BirthDate(7, 7, 1970);
BirthDate d2 = new BirthDate(1, 1, 2000);
ex.change1(date);
ex.change2(d1);
ex.change3(d2);
System.out.println("date=" + date);// ?
System.out.println(d1);
System.out.println(d2);
}
public void change1(int i) {
i = 1234;
}
public void change2(BirthDate b) {
b = new BirthDate(22, 2, 2004);
}
public void change3(BirthDate b) {
b.setMonth(11);
}
执行输出结果是:date=9
7-7-1970
1-11-2000;
解析:对于第一个,是传值,所以,开始的时候date将值传给i=9;然后i又被重新赋值,i=1234,因此date的值不会发生变化。
对于第二个,传引用,开始b=d1;(b1的指针指向d1的对象)然后b被new了对象,指针放弃原来的对象,指向新的对象,然后给b赋值,没有改变d1里面的值;
对于第三个,传引用,开始b=d2;(b的指针指向d2的对象),然后开始设置b的值,因为现在b和d2指向的是同一个对象,所以,对象里的内容被改变。
int date = 9;
BirthDate d1 = new BirthDate(7, 7, 1970);
BirthDate d2 = new BirthDate(1, 1, 2000);
ex.change1(date);
ex.change2(d1);
ex.change3(d2);
System.out.println("date=" + date);// ?
System.out.println(d1);
System.out.println(d2);
}
public void change1(int i) {
i = 1234;
}
public void change2(BirthDate b) {
b = new BirthDate(22, 2, 2004);
}
public void change3(BirthDate b) {
b.setMonth(11);
}
执行输出结果是:date=9
7-7-1970
1-11-2000;
解析:对于第一个,是传值,所以,开始的时候date将值传给i=9;然后i又被重新赋值,i=1234,因此date的值不会发生变化。
对于第二个,传引用,开始b=d1;(b1的指针指向d1的对象)然后b被new了对象,指针放弃原来的对象,指向新的对象,然后给b赋值,没有改变d1里面的值;
对于第三个,传引用,开始b=d2;(b的指针指向d2的对象),然后开始设置b的值,因为现在b和d2指向的是同一个对象,所以,对象里的内容被改变。