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

Java函数间参数传递差异疑问:两示例结果为何不同?

Java参数传递:为什么两个示例结果完全不同?

先给核心结论:Java里的参数传递始终是值传递,但传递的内容分两种情况,这就是两个示例差异的根源。

分析示例1:基本类型的参数传递

示例1里的flag是boolean类型,属于基本数据类型。当你把它传给dfs方法时,Java会复制这个变量的值,把副本传给方法里的flag参数。

  • 方法里修改的只是这个副本,和main方法里的原flag变量完全无关。所以main方法最终输出的还是最初的false。

分析示例2:引用类型的参数传递

示例2里的combinations是ArrayList,属于引用数据类型。传递参数时,Java复制的是这个变量存储的对象引用地址,把地址的副本传给方法里的combinations参数。

  • 此时,原变量和方法里的参数指向的是同一个ArrayList对象。方法里调用combinations.add(...),是在操作这个共享的对象本身,修改的是对象的内部状态。所以回到letterCombinations方法时,原变量指向的对象已经被修改了。

补充一个容易混淆的点

如果在doCombination里给combinations重新赋值,比如写:

combinations = new ArrayList<>();

那原变量不会受任何影响——因为这时候修改的是方法里的引用副本,原变量的引用还是指向原来的ArrayList对象。只有调用对象的方法修改其内部状态时,才会影响到原变量指向的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:36:44