来说一个技术点,List作为参数数据丢失问题
下面方法,执行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对象重新赋值。严格来说,对于引用类型来说,当引用对象作为方法参数时,我们在方法内部只可更改内存中的内容,但不可变更内存地址。 下面的案例同样证明了这一点。
private void foo1() { Account entity=null; foo2(entity); System.out.println("---outside="+entity); } private void foo2(Account obj) { obj=new Account(); System.out.println("---internal="+obj); }
结果输出的是:
---internal=Account(id=null, accountId=null, accountName=null, ...) ---outside=null
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/p/17252703.html