java的参数传递与内存分配问题

本文可作为北京尚学堂java课程的学习笔记。看下面这段代码。class BirthDate {private int day;private int month;private int year;public BirthDate(int d, int m, int y) {day = d;month = m;year = y;}//省略get setpublic void display() {System.out.println(day + " – " + month + " – " + year);}}public class Test{public static void main(String args[]){Test test = new Test();int date = 9;BirthDate d1= new BirthDate(7,7,1970);BirthDate d2= new BirthDate(1,1,2000);test.change1(date);test.change2(d1);test.change3(d2);System.out.println("date=" + date);d1.display();d2.display();}public void change1(int i){i = 1234;}public void change2(BirthDate b) {b = new BirthDate(22,2,2004);}public void change3(BirthDate b) {b.setDay(22);}}结果如下:date=97 – 7 – 197022 – 1 – 2000我自己不明白的是change2这个方法,它竟然没有改变d1的值!其实我们想想也就明白了,在change2运行的时候,栈内存中又多了一块区域,存放局部变量b。在change2运行时,b首先指向实参d1的位置。也就是7-7-1970 而后new 了一个新的birthday,假定它在堆内存的地址为5421 那么b的值改成了5421 等change2这个方法结束的时候,b这块内存也就消失了。d1自然什么都不变喽。再看change3运行这个方法的时候,b首先指向的也是实参d2的位置。我们直接通过b修改了那块内存的数据,那么d2这个变量的值自然也就改变了。

,敏而好学,不耻下问。

java的参数传递与内存分配问题

相关文章:

你感兴趣的文章:

标签云: