黑马程序员技术交流社区
标题:
迷糊咯。求解疑答惑。
[打印本页]
作者:
曾_强
时间:
2012-5-18 08:55
标题:
迷糊咯。求解疑答惑。
当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。
当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。
对以上两句话迷糊了。
作者:
何阳
时间:
2012-5-18 09:38
说的就是,如果你传递的是基本数据类型,在一个方法内执行完以后,方法出栈,局部变量也随之消失。
如果你传递的是引用型数据变量,传递的是堆内存的地址,这个时候主函数与方法中的变量指向同一个对象,但方法执行完以后,方法出栈,方法中的变量也随这出栈,主函数中依旧指向自己的对象,如何你在调用方法时,对对象中的内容修改了,那么此时主函数中的对象也随之修改。没有,则不变化。
建议你画一下内存图,
作者:
郭宁
时间:
2012-5-18 09:50
如果你学过C语言,这个肯定容易理解。
例:有函数 test(People p)
People a;
test(p)
则p 和 a 指向的是同一对象,即在内存中是同一块地址
你在函数里面对 p 内容的操作 自然会影响 a 的内容
但是 a 指向的地址不会变 也就是不会改变实参对象的引用
作者:
彩虹
时间:
2012-5-18 11:32
我觉得你这可以用例类似C++的知识解决,C++有两种传参的机制,值传递和地址传递
第一句:可能是针对值传递的情况,传递的只是变量的值,在方法体内无论进行何种操作,也只是局部改变了该变量的值,而在程序执行的整个作用域中,变量的值是不受其影响的
第二句:可能是针对传递地址的情况,将变量的地址传递给方法,方法内部进行的操作,如果改变了该变量的地址,也就相当于改变了该变量的值,所以整个程序作用域中该变量值也会发生改变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2