Java 方法参数传递:彻底理解 “值传递” 本质
在 Java 中,方法参数的传递机制一直是初学者容易混淆的问题。尽管经常有人讨论 “值传递” 与 “引用传递” 的区别,但Java 中只有值传递—— 无论传递的是基本数据类型还是引用数据类型,方法接收的都是参数值的一份 “拷贝”。本文将通过实例深入解析这一机制,澄清常见误解。
值传递的核心定义
值传递(Pass-by-Value)是指:方法在被调用时,会创建参数值的一个副本,并将副本传递给方法。方法内部对参数的修改,只会影响这个副本,不会影响原始参数。
与之相对的 “引用传递”(Pass-by-Reference)是指:方法接收的是参数的内存地址,对参数的修改会直接影响原始对象。但Java 并不支持这种传递方式。
基本数据类型的参数传递
基本数据类型(如 int、char、boolean 等)的值传递行为非常直观:方法接收的是原始值的拷贝,修改拷贝不会影响原始值。
示例代码:
1 | public class PrimitivePassing { |
原理分析:
main方法中的num是原始变量,值为10;- 调用
modify(num)时,Java 创建num的副本(值为10),并将副本传递给modify方法的value参数; modify方法中修改的是value(副本),原始变量num不受影响。
引用数据类型的参数传递
引用数据类型(如 String、Object、数组、自定义类等)的传递机制容易产生误解。许多人认为这是 “引用传递”,但实际上,传递的是引用地址的拷贝。