Java没有C++的引用符号&,所有参数传递均为值传递:基本类型传数值副本,引用类型传地址副本;无法改变外部变量绑定关系,不支持真正的别名机制。

Java没有C++那样的引用符号 &
Java语言里根本不存在 & 这个语法。C++ 中的 int& ref = a; 是声明一个变量的别名,一旦绑定就不能再指向别的对象;而 Java 所有非基本类型的变量(比如 String、List、自定义类实例)本质上都是隐式引用变量,它们存储的是堆中对象的地址,但这个地址本身是值,不是别名。
“引用传递”在Java中并不存在
Java所有参数传递都是值传递:
- 基本类型传的是数值副本;
- 引用类型传的是引用地址的副本(即那个4字节或8字节的内存地址值的拷贝)。
这意味着方法内可以修改对象的状态(因为副本和原引用指向同一个堆对象),但无法让外部变量指向新对象——比如在方法里写 sb = new StringBuilder(),对外部变量毫无影响。
C++引用能做的事,Java做不到
C++ 的 & 支持真正的“绑定到变量本体”,因此可以实现:
- 函数内直接交换两个变量的值(如 swap(int& a, int& b));
- 返回局部变量的引用(安全且高效);
- 避免拷贝大对象,同时保持语义清晰。
Java 没有这种机制,它只能靠返回值、包装容器(如数组)、或可变对象来间接模拟,但逻辑上始终绕不开“地址副本”这一层。
边界就落在“能否改变变量本身的绑定关系”上
判断是不是 C++ 那种引用,关键看: - 能否在函数中让调用方的变量改指另一个对象?→ Java 不行,C++ 引用参数可以; - 能否把一个变量声明为另一个变量的永久别名?→ Java 没有该语法,C++ 可以; - 能否用引用接收函数返回值并避免拷贝?→ Java 返回对象就是返回引用地址副本,本质仍是值;C++ 可以返回引用并直接绑定。
不复杂但容易忽略:Java 的“引用”是运行时概念,C++ 的 & 是编译时语法机制——两者不在同一抽象层级上。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











