首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java:数组和集合类作为参数传递时的差别(有关问题解决,多谢大家提醒)

2012-11-22 
Java:数组和集合类作为参数传递时的差别(问题解决,谢谢大家提醒)最近在做项目时遇到一个List集合作为参数

Java:数组和集合类作为参数传递时的差别(问题解决,谢谢大家提醒)

       最近在做项目时遇到一个List集合作为参数传递的问题,想起了以前总结的参数传递,参数传递包括值传递和引用传递,集合类的参数应该属于引用传递,脑子里突然就闪现到了数组,感觉数组也是一种特殊的集合,也应该是引用传递,于是就举了个简单的例子作为测试,但是测试结果大跌眼镜,数组居然没有实现像List集合那样的效果,现将问题罗列出来,请各位前辈指教,等问题解决后会做一下小结。问题如下

       首先定义一个类Test1:  

List集合结果为:list1List集合结果为:list2List集合结果为:list3数组结果为:string2

       问题:List集合在作为参数传递的时候是地址引用传递,所以在类Test2的getList()方法中,定义的LIst类型的test作为参数传递为Test1的构造方法后通过this.list=list把test的地址给Test1中的成员变量list,再通过调用test1中的putList()方法对list进行添加数据,由于是地址引用所以也就改变了传过来的test的值,最终test的也增加了list1,list2,list3,再通过return test使方法返回一个增添了数据的List集合,最终赋值给Test2中的成员变量list并输出,得到结果,结果也是预料之内的,问题就在于对数组操作的结果,因为两个操作是一样的,在Test2的getString()方法中定义了一个数组test并且对其进行了赋值,再把它作为参数传递给Test1的构造方法,通过test1的putString()方法对其修改,这时test的值应该是修改后的值即:string1,但是输出来后还是原来的值string2,这不就成了值传递了吗,没有对数组进行改变?

      问题解决方法:首先一点,List集合和数组作为参数时一定是进行地址引用传递的,但是自己在编写程序时出现了错误,在Test2中传入数组test后,Test1中的数组str指向这个数组,但是在类Test1中的putString()方法中,将数组str指向了一个新的数组地址,这样对str进行操作就不会影响到test了,所以在getString()方法中test是没有变化的,哎,写到这里,有想到了自己可怜的基础知识了,还是需要慢慢积累吧,加油!

2楼tingwin昨天 20:47
据我所知,java不管是集合还是普通变量都是值传递。其次,你Test1里面的putString() 方法已经把Test1中的str(之前指向了Test2中的str)再次指向了一个新对象new String[]{"string1"}。所以整个个时候Test1中的str和Test2中的str已经不是指向同一个对象了。所以你在Test2中输出str的时候,输出的是Test2中的str,和Test1中的str已经没有任何联系了。如果你把Test1中的putString方法改为str[1]=new String[]{"string1"} 就得到你想要的结果了
Re: zzp_403184692昨天 23:18
回复tingwinn谢谢你的答案,你的解决方法是对的,我当时没有转过那个弯,在Test1中把str指向了一个新的数组对象,结果造成了以上的现象,不过集合和数组在做参数时是进行地址引用传递的,这一点可以肯定。。。。。大家共同学习了!
1楼tingwin昨天 12:15
恩,共同学习,对,的确是传地址,但那不是引用传递。等下我会写一篇关于引用传递和数值传递的博文。
Re: zzp_403184692昨天 14:03
回复tingwinn引用传递一般指的就是指针传递或者地址传递,但是java里面没有指针,所以可以把地址传递叫做引用传递吧

热点排行