关于调用方法传入实参的一些误解

   需求:通过调用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中调用方法并接收.​​​​

转载于:https://www.cnblogs.com/doveshelly/p/8526021.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值