You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将对象引用指向另一对象,实现List列表内容更新

问题根因

Java的参数传递规则为值传递:对于引用类型的参数,方法内部拿到的是原引用的副本,两个引用初始指向同一个堆对象,但你直接对方法内的参数变量messages做赋值操作时,仅会修改局部引用的指向,完全不会影响main方法中原有messages变量的引用指向,因此原列表的内容没有任何改动,最终还是会打印5条数据。

修复方案

有两种常用实现方式可以满足需求:

方案1:修改原列表内容(无需改动调用逻辑)

不修改引用指向,直接操作原列表的内容,先清空原有元素再添加子列表的元素即可:

private static void updateMessages(List<Message> messages) {
    List<Message> sublistMessages = getMessageSublist(messages);
    // 清空原列表所有元素
    messages.clear();
    // 把新子列表的元素加入原列表
    messages.addAll(sublistMessages);
}

方案2:返回新列表替换原引用(纯函数无副作用)

修改updateMessages方法的返回值为新生成的子列表,在main方法中用原变量接收返回值即可:
首先修改方法定义:

private static List<Message> updateMessages(List<Message> messages) {
    return getMessageSublist(messages);
}

再修改main方法中的调用逻辑:

// 将原来的 updateMessages(messages); 替换为下面的代码
messages = updateMessages(messages);

内容的提问来源于stack exchange,提问作者DTK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:15:00