java集合作为参数 传递的是_Java:数组和集合类作为参数传递时的差别
最近在做項目時遇到一個List集合作為參數傳遞的問題,想起了以前總結的參數傳遞,參數傳遞包括值傳遞和引用傳遞,集合類的參數應該屬于引用傳遞,腦子里突然就閃現到了數組,感覺數組也是一種特殊的集合,也應該是引用傳遞,于是就舉了個簡單的例子作為測試,但是測試結果大跌眼鏡,數組居然沒有實現像List集合那樣的效果,現將問題羅列出來,請各位前輩指教,等問題解決后會做一下小結。問題如下
首先定義一個類Test1:
public class Test1 {
//這部分是針對list的操作,首先定義一個空的list集合容器
List list=null;
//用list集合容器作為參數的構造方法
public Test1(List 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"};
}
}
該類中分別定義了對List集合和數組Str的處理。對于List集合,首先定義一個List集合作為參數的集合,然后再通過方法putList()對集合進行數據增加,對于數據也做了類似的操作,然后定義一個操作類Test2:
public class Test2 {
//定義空的list集合以及數組
static List list=null;
static String[] str=null;
//返回一個list集合類型的數據
public static List getList()
{
List test=new ArrayList();
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 iterator = list.iterator(); iterator.hasNext();)
{
System.out.println("List集合結果為:"+iterator.next().toString());
}
//將getString()方法中得到的數組傳遞給str,并顯示其中的內容
str=getString();
for(int i=0;i
{
System.out.println("數組結果為:"+str[i]);
}
}
}
該類中分別定義了空的List集合和數組和得到各自類型的方法,然后在主方法中分別打印出List集合和數組中的值,結果如下:
List集合結果為:list1
List集合結果為:list2
List集合結果為: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是沒有變化的,哎,寫到這里,有想到了自己可憐的基礎知識了,還是需要慢慢積累吧,加油!
總結
以上是生活随笔為你收集整理的java集合作为参数 传递的是_Java:数组和集合类作为参数传递时的差别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: key map 模糊查找_lua脚本语言
- 下一篇: 利用自己的服务器搭建专属私有云盘&