求解java中“把数组传递给方法”的一个概念性问题

“把数组传递给方法”:就对象而言,不是将对象本身传递给方法,而是将对象的引用传递给方法,引用本身是按值传递的-------也就是说,将引用的副本传递给方法。

我的问题是:既然引用本身是按值传递的,那么为什么通过对象的引用可以直接操作对象?或者说在传递值得同时,还传递了什么?

谢谢!

我给你用大白话说吧。
当数组传递给参数时,传递的是这个数组的地址的值。这时形参的值(也就是数组的地址)同数组一样都指向存储数组的内存。所以你对形参进行操作想当于直接操作实参。
其实你要是懂他们在内存中的存储方式就好懂多了。当新建一个数组时,电脑是不分配内存的,只有当初始化了之后才分配内存。你所用的(比如int[ ] array = {1,2,3})数组名array其实它代表的是一个地址,这个地址指向{1,2,3}。把array传递给了形参(比如max(int[ ] m,),这时形参m也是一个地址,同样指向{1,2.3}。这个明白了吗?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-12
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

引用传递---对象作为参数
如果在方法中把对象(或数组)作为参数,方法调用时,参数传递的是对象的引用(地址),即在方法调用时,实际参数把对对象的引用(地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象(数组),方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。

参考资料:http://zouyuefen.blog.163.com/blog/static/10278015620108280621843/

第2个回答  2011-07-13
觉得你还没有彻底理解对象的引用和值。有例子有真相
int[] nums;--->声明了一个int类型数组对象,此时指向未知之地;
nums = new int[5]; 内存中开辟了一片新的连续内存空间,假设首地址为aaaa
此时nums的值为aaaa,也就是它指向的引用为aaaa;

传递参数的时候传递nums,也就是传递内存地址aaaa;所以在方法里面修改,是修改内存里面的实际值,但是内存的这个首地址aaa并没有任何变化,但是里面的数组元素变化了。本回答被提问者采纳
第3个回答  2011-07-13
引用本身是按值传递的,但这个值是个内存地址,那么你说能不能操作对象呢
相似回答