A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

阿磊

  • 黑马币:18

  • 帖子:218

  • 精华:0

© 阿磊   /  2014-8-5 00:06  /  3057 人查看  /  57 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

去看看核心技术卷一 115页4.5方法参数,对java传递参数机制有详细说明
回复 使用道具 举报
画了两张内存图:
1. main函数调用swap函数,将参数传递完毕但swap函数中的代码尚未开始执行前

可以看到,swap函数中的str1和str2与main函数中的同名变量是两回事,只不过它们有相同的值——对象所在的堆地址值(这里就不考虑常量池了),这就是所谓的值传递。除了值相同以外,两个函数的同名变量之间是独立的,互不干扰

2. swap函数中的代码尚执行完毕后

尽管swap函数中的str1和str2交换了指向,但不影响main函数中的str1和str2的指向

评分

参与人数 1黑马币 +5 收起 理由
阿磊 + 5 很给力!

查看全部评分

回复 使用道具 举报
swap方法进栈后,将地址值赋值了一份,也执行了方法内的换值,但是swap出栈后,打印的还是主函数里面的值,第二个确实是在主函数中互换了,所以打印的值变化了。如果你想swap方法也可以交换字符串的话,就需要将交换后的字符串返回给调用者,并打印,那么结果肯定是改变了。
回复 使用道具 举报
fantacyleo 发表于 2014-8-5 21:22
画了两张内存图:
1. main函数调用swap函数,将参数传递完毕但swap函数中的代码尚未开始执行前

哦 哦 大概有点明白了,看的很清楚,现在如果换成其他的参数也是一样的吧?那数组的换位我能这样理解吗?就是方法和mian函数一样都指向了数组的地址值,但是方法操作的是数组内部的元素,换了位置,但是mian仍然指向它,所以在数组内部换位以后,主函数中要操作数组仍然是同一个数组,但是它已经换位了,这样理解可以吗?
回复 使用道具 举报
我是来学习的。。。。
回复 使用道具 举报
阿磊 发表于 2014-8-5 22:44
哦 哦 大概有点明白了,看的很清楚,现在如果换成其他的参数也是一样的吧?那数组的换位我能这样理解吗? ...

嗯,正确
回复 使用道具 举报

多谢多谢。。。。:handshake
回复 使用道具 举报
你应该没搞懂局部变量把,而且字符串是不能被修改的,
回复 使用道具 举报
刘小印 发表于 2014-8-5 23:34
你应该没搞懂局部变量把,而且字符串是不能被修改的,

现在差不多懂了 在大牛们的帮助下  模模糊糊懂了  呵呵
回复 使用道具 举报
威猛的小熊 来自手机 高级黑马 2014-8-5 23:46:16
50#
学习学习。。。
回复 使用道具 举报
dreamseekerkun 来自手机 中级黑马 2014-8-6 01:09:52
51#
我是来学习的
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马