ps制作网站效果图,四川住建厅信息查询系统,建设工程信息查询,网站建设价格为何相差甚大目录
1. 问题概述
1.1 测试
1.2 结果
2. ArrayList和Arrays.ArrayList 1. 问题概述
最近忙着写论文很久没更新了#xff0c;趁现在有时间简单记录一下最近遇到的一个坑。
对于Java中的List类型的对象#xff0c;按我以前理解是引用传递#xff0c;但有一点要注…目录
1. 问题概述
1.1 测试
1.2 结果
2. ArrayList和Arrays.ArrayList 1. 问题概述
最近忙着写论文很久没更新了趁现在有时间简单记录一下最近遇到的一个坑。
对于Java中的List类型的对象按我以前理解是引用传递但有一点要注意就是在调用方法里面如果直接将一个新的List对象赋值于该方法参数会导致变成值传递因为这个操作直接修改了方法参数的引用地址无论怎么修改都无法影响到调用方法的对象。
1.1 测试
先看看下面的代码简单来说就是通过handleList方法更新sourceList。
public static void handleList1(ListString sourceList) {System.out.println(handleList1);ListString tempList new ArrayList();for(String item: sourceList) {if(item.equals(EEEEE)) {// cant change sourceList directlytempList.add(E);} else {tempList.add(item);}}sourceList tempList;}public static void handleList2(ListString sourceList) {System.out.println(handleList2);ListString tempList new ArrayList();for(String item: sourceList) {if(item.equals(EEEEE)) {// cant change sourceList directlytempList.add(E);} else {tempList.add(item);}}sourceList.clear();sourceList.addAll(tempList);}
通过以下方法测试
public static void main(String[] args) {// 1ListString sourceList new ArrayListString(){{add(A); add(B); add(C); add(D);add(EEEEE);}};handleList1(sourceList);System.out.println(sourceList);// 2sourceList new ArrayListString(){{add(A); add(B); add(C); add(D);add(EEEEE);}};handleList2(sourceList);System.out.println(sourceList);}
1.2 结果 上面可以发现handleList1方法并没有成功修改sourceList的值因为重新为sourceList赋予了新的地址永远不会改变原来地址空间的sourceList。
但其实如果idea用的是专业版的话就可以直接发现这个bug但是当时用的社区版没提示一着急就踩坑了。 2. ArrayList和Arrays.ArrayList
顺便提一下因为上面的要求需要修改List的内容line26不能直接修改for循环的sourceList内容
同时如果List是Arrays.ArrayList的实例那么不支持add(); clear(); addAll();这些操作
不然都会报UnsupportedOperationException。
所以如果需要将数组转成List可以这样
List list new ArrayList(Arrays.asList(A, B, C))
更多方式可以参考List操作addclearaddall