由于list使用不当,导致了一个很诡异的问题,关键代码大概是这样的
方法a里:
List<Object> list=new ArrayList<>();
b(list);
list.get(0);
。。。
方法b里:
list=***Dao.queryAll
。。。
用list接收的dao层返回的查询结果集
分析堆栈后找的了问题的原因:
方法a中new了个ArrayList,在堆中开辟了块空间,并将list变量指向这块空间
进入方法b后list指向了查询到的结果集的空间
方法b执行结束后list又指回了ArrayList所占的空间
这时ArrayList的元素没做任何更改,也就是空的List,后续代码调list.get(0)做后续操作时由于list没有元素从而导致报索引超出范围的错误
看到这大致有解决方案了吧,我是在方法b里这样改的:
List<Object> temp=***Dao.queryAll
list.addAll(temp)
在方法b里为list添加元素,这样方法b执行完后list里就b执行的结果了