zoukankan      html  css  js  c++  java
  • 关于调用方法传入实参的一些误解

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

  • 相关阅读:
    centOS7 查看防火墙状态 开放端口
    PHP之Trait详解 转
    ps 树形显示
    composer 打印美化
    第一章 Java Web应用开发技术
    团队博客20
    团队博客19
    团队博客18
    团队博客17
    团队博客16
  • 原文地址:https://www.cnblogs.com/doveshelly/p/8526021.html
Copyright © 2011-2022 走看看