为何给List引用赋值新列表提示‘从未使用’且原列表无变化?
问题原因分析
核心问题:Java的参数传递机制
Java里对象类型参数是值传递,传递的是对象引用的副本。也就是说,方法里的brokers变量只是原列表引用的一个拷贝——一开始它和原引用指向同一个列表对象,但当你执行brokers = ListUtils.union(...)时,只是把这个副本的指向改成了新生成的合并列表,原调用处的列表引用完全没被改变,原列表对象自然不会有任何变化。
关于“从未使用”的提示
你给方法内的brokers变量赋值后,这个变量在方法后续流程里再也没被用到(方法执行完就销毁了),所以IDE会提示这个赋值操作是无效的、从未被使用。
正确的修改方向
如果要修改原列表,别重新赋值变量,而是直接操作原列表对象:
private void moveNullBrokerToEnd(List<Broker> brokers) { if (brokers != null) { List<Broker> nullTypeBrokers = new ArrayList<>(); List<Broker> commonBrokers = new ArrayList<>(); for (Broker broker : brokers) { if (broker.getMemberType() == null) { nullTypeBrokers.add(broker); } else { commonBrokers.add(broker); } } // 清空原列表,再依次加入普通Broker和空类型Broker brokers.clear(); brokers.addAll(commonBrokers); brokers.addAll(nullTypeBrokers); } }
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

