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

Java 8集合代码疑问:调用test方法后list对象的内容是什么?

调用test方法后list的内容解析

嘿,我来帮你理清这个问题~首先直接给结论:调用test方法回到main后,list的内容是[10, 5],和你预期的[]不一样,核心原因是要搞懂Java的参数传递逻辑。

咱们一步步拆解代码的执行过程:

  1. main方法初始操作:
    你创建了一个LinkedList实例,变量list保存的是这个实例的内存引用(可以类比成“房子的地址”)。执行list.add(10)后,这个LinkedList里就有了元素10,所以第一次System.out.println(list)输出[10]。

  2. 调用test方法时的参数传递:
    Java里的参数传递是值传递,当你调用test(list)时,实际上是把list里保存的“地址”复制了一份,传给test方法的参数obj。这时候,main里的list和test里的obj,手里拿着的是同一个地址的副本——相当于你和朋友各有一张写着你家地址的纸条。

  3. test方法里的obj.add(5):
    这一步是通过手里的地址找到对应的房子(也就是原来的LinkedList实例),往里面加了元素5。这时候你家房子里的东西已经变成了[10, 5],不管是你手里的纸条还是朋友手里的,指向的都是这个房子,所以内容的变化是真实存在的。

  4. test方法里的obj = new ArrayList<>():
    这一步是朋友把自己手里的纸条改成了一个新房子的地址(新建的ArrayList),但这和你手里的纸条完全没关系——你手里的纸条还是指向原来的房子,所以这个操作不会影响main里的list。

当test方法执行完回到main时,list依然指向最初的LinkedList实例,里面的内容已经是[10, 5],所以第二次System.out.println(list)会输出这个结果。

总结一下关键知识点:

  • Java中传递对象类型参数时,传递的是引用的副本,不是引用本身。
  • 修改参数的引用指向(比如obj = new ArrayList<>())不会改变原变量的指向,但通过参数操作对象的内容(比如obj.add(5))会影响原对象,因为两者指向的是同一个实例。

内容的提问来源于stack exchange,提问作者Ravi Ranjan Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:57