(急急急) Java:数组和集合类作为参数传递时的差别,为什么数组出现值传递的现象?
最近在做项目时遇到一个List集合作为参数传递的问题,想起了以前总结的参数传递,参数传递包括值传递和引用传递,集合类的参数应该属于引用传递,脑子里突然就闪现到了数组,感觉数组也是一种特殊的集合,也应该是引用传递,于是就举了个简单的例子作为测试,但是测试结果大跌眼镜,数组居然没有实现像List集合那样的效果,现将问题罗列出来,请各位前辈指教,等问题解决后会做一下小结。问题如下
首先定义一个类Test1:
public class Test1 {
//这部分是针对list的操作,首先定义一个空的list集合容器
List<String> list=null;
//用list集合容器作为参数的构造方法
public Test1(List<String> list)
{
super();
this.list=list;
}
//对容器增加数据
public void putList(){
list.add("list1");
list.add("list2");
list.add("list3");
}
//------------------------------
//这部分是对数组的操作,首先定义一个空的数组
String[] str=null;
//用数组作为参数的构造方法
public Test1(String[] str)
{
this.str=str;
}
//对数组增加数据
public void putString()
{
str=new String[]{"string1"};
}
}
public class Test2 {
//定义空的list集合以及数组
static List<String> list=null;
static String[] str=null;
//返回一个list集合类型的数据
public static List<String> getList()
{
List<String> test=new ArrayList<String>();
Test1 test1=new Test1(test);
test1.putList();
return test;
}
//返回一个数组类型的数据
public static String[] getString()
{
String[] test=new String[]{"string2"};
Test1 test1=new Test1(test);
test1.putString();
return test;
}
public static void main(String[] args)
{
//将getList()方法中得到的list集合传递给list,并显示其中的内容
list=getList();
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();)
{
System.out.println("List集合结果为:"+iterator.next().toString());
}
//将getString()方法中得到的数组传递给str,并显示其中的内容
str=getString();
for(int i=0;i<str.length;i++)
{
System.out.println("数组结果为:"+str[i]);
}
}
}
List集合结果为:list1
List集合结果为:list2
List集合结果为:list3
数组结果为:string2
str=new String[]{"string1"};
}
在没调用这个方法前,str的引用和String[] test=new String[]{"string2"}这里的test的引用是同一个地方,但是调用了putString()方法后,你给str重新new了个对象,也就是把str引用指向了最新的这个new的地方,但也只是改变了str的引用而已,它并没有改变test的引用。
你把方法改成如下,就正确了。
public void putString()
{
str[0] = "string1";
}