1. 程式人生 > >關於調用方法傳入實參的一些誤解

關於調用方法傳入實參的一些誤解

需求 con 並不會 ring 代碼 接收 集合 實參 rgs

需求:通過調用noRepeat()方法對集合list去重

public class Test_4_2 {

public static void main(String[] args) {

ArrayList<String> list = new ArrayList<>();

list.add("a");

list.add("a");

list.add("c");

list.add("c");

list.add("a");

list.add("d");

noRepeat(list);

System.out.println(list);

}

public static void noRepeat(List<String> al){

ArrayList<String> list2 = new ArrayList<String>();

for (int i = 0; i <al.size(); i++) {

if (!list2.contains(al.get(i))) {

list2.add(al.get(i));

}

}

al=list2;

}

}

在做這道題的過程中,出現的問題如上述代碼.在noRepeat方法中,形參為List類型集合,在方法中創建list2集合存儲了不重復的元素,而該方法的返回值為void,因此,在最後我直接將list2的地址值賦

給al.運行改程序,發現list集合並沒有改變.事實上,在方法的形參實際語句為: List<String> al =list;

將list集合的地址值賦值給參數al,然後用al去操作集合.在最後,al=list2並不會對list產生影響,因此要想改變結果,必須通過al改變集合,或者把void改為由返回值的list並用自己來接收

解決方法1:

al.clear();

al.addAll(list2);

解決方法2:

return list2;

list=noRepeat(list);

因此,可以看出,調用方法要對集合或者數組進行操作,若返回值為void,則需要直接對該集合進行操作.若返回值為集合,則可以返回新集合的地址值並在main中調用方法並接收.????

關於調用方法傳入實參的一些誤解