java中构造方法参数传递是值传递,基本类型传数值副本,引用类型传地址值副本,修改形参不影响实参变量指向。

是的,Java中构造方法初始化对象时传入的参数,和普通方法一样,全部是值传递。
构造方法的参数传递本质没特殊性
构造方法不是“例外”,它遵循与普通方法完全一致的参数传递规则:无论参数是基本类型还是引用类型,Java都只做值传递。
- 基本类型参数(如int、boolean):传递的是该数值的副本。构造方法内修改形参,不影响调用处的实参变量。
- 引用类型参数(如String、自定义Person对象、数组等):传递的是“引用值”的副本——即对象在堆中的地址值的拷贝。形参和实参指向同一对象,因此可通过形参修改对象内部状态;但若在构造方法中让形参指向新对象(如param = new Person()),不会改变调用处原始引用的指向。
一个典型例子说明
假设有一个类:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
class Box {
String label;
Box(String label) {
this.label = label; // 使用传入的引用副本赋值给成员变量
label = "modified inside ctor"; // 修改形参label本身(指向新字符串)
}
}
调用时:
String s = "original"; Box b = new Box(s); System.out.println(s); // 输出:original(未变) System.out.println(b.label); // 输出:original(因为this.label = label时用的是原引用)
这里s的值没有被构造方法改变,证明String参数也是按值传递——传递的是字符串引用的副本,不是引用本身。
为什么容易误解?
因为构造方法常用于“初始化对象”,开发者会自然关注它对this字段的赋值行为(如this.name = name),误以为“参数被直接‘注入’了”。其实这和普通方法中写obj.setName(name)逻辑一致:都是通过传入的引用副本访问并操作堆上的同一对象,而非改变了参数传递机制本身。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










