来说一个技术点,List作为参数数据丢失问题

发布时间 2023-03-24 17:01:56作者: buguge

下面方法,执行foo1,结果会是什么?

private void foo1() {
    List<String> list =new ArrayList<>();
    foo2(list);
    System.out.println("---outside="+list);
}

private void foo2(List<String> list) {
    list = Arrays.asList("123", "dsf");
    System.out.println("---internal="+list);
}

结果如下。 调用foo2之后,list的值依然是空集合。

---internal=[123, dsf]
---outside=[]

 

你是不是以为list应该是[123,dsf]呢? 那就错了。

来看看IDE中这个foo2,list参数是灰色。并且,IDE还提示你,这种情况可以把list作为局部变量。

 

根据IDE提示

重构后→

 

 

这是java的一个基础知识点。 当List作为方法入参时,你在方法里可以改变List中的元素,包括增减元素,但是不能给List对象重新赋值。