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 set

public 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=9
7 – 7 – 1970
22 – 1 – 2000
我自己不明白的是change2这个方法,它居然没有改变d1的值!

其实我们想一想也就明白了,在change2运行的时候,栈内存中又多了1块区域,寄存局部变量b。在change2运行时,b首先指向实参d1的位置。也就是7⑺⑴970 而后new 了1个新的birthday,假定它在堆内存的地址为5421 那末b的值改成了5421 等change2这个方法结束的时候,b这块内存也就消失了。d1自然甚么都不变喽。

再看change3
运行这个方法的时候,b首先指向的也是实参d2的位置。我们直接通过b修改了那块内存的数据,那末d2这个变量的值自然也就改变了。

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » java的参数传递与内存分配问题

1 评论

  1. Good info. Lucky me I reach on your website by accident, I bookmarked it. Metropol Halı Karaca Halı Öztekin ve Selçuklu Halı Cami Halısı ve Cami Halıları Türkiye’nin En Büyük Cami Halısı Fabrikasıyız…

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡