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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾_强 中级黑马   /  2012-5-18 08:55  /  1582 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。

对以上两句话迷糊了。

3 个回复

倒序浏览
说的就是,如果你传递的是基本数据类型,在一个方法内执行完以后,方法出栈,局部变量也随之消失。
如果你传递的是引用型数据变量,传递的是堆内存的地址,这个时候主函数与方法中的变量指向同一个对象,但方法执行完以后,方法出栈,方法中的变量也随这出栈,主函数中依旧指向自己的对象,如何你在调用方法时,对对象中的内容修改了,那么此时主函数中的对象也随之修改。没有,则不变化。
建议你画一下内存图,
回复 使用道具 举报
如果你学过C语言,这个肯定容易理解。
例:有函数 test(People p)
People a;
test(p)
则p 和 a 指向的是同一对象,即在内存中是同一块地址
你在函数里面对 p 内容的操作 自然会影响 a 的内容
但是 a 指向的地址不会变 也就是不会改变实参对象的引用
回复 使用道具 举报
    我觉得你这可以用例类似C++的知识解决,C++有两种传参的机制,值传递和地址传递
    第一句:可能是针对值传递的情况,传递的只是变量的值,在方法体内无论进行何种操作,也只是局部改变了该变量的值,而在程序执行的整个作用域中,变量的值是不受其影响的
    第二句:可能是针对传递地址的情况,将变量的地址传递给方法,方法内部进行的操作,如果改变了该变量的地址,也就相当于改变了该变量的值,所以整个程序作用域中该变量值也会发生改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马