java中对象参数和返回值本质是值传递,传递的是引用地址的副本;修改对象属性影响原对象,但重赋值不影响;返回引用支持链式调用;多态参数提升灵活性;基本类型传数值,引用类型传地址。

Java 中对象作为方法参数和返回值,表面像“引用传递”,实际仍是值传递——传递的是对象引用(即内存地址)的副本。理解这一点,就能准确预判方法内操作是否影响外部对象。
对象作参数:改属性有效,换对象无效
传入对象时,形参拿到的是原引用变量所存地址的一个副本。两个引用指向同一块堆内存,因此:
- 修改对象内部状态(如
p.setName("Tom"))会反映到原对象上 - 但让形参指向新对象(如
p = new Person())只改变副本的指向,原引用不变 - 常见误判点:以为“重赋值能改变外部变量”,其实只是局部变量换了目标
对象作返回值:返回的是引用,不是对象副本
方法声明用类名作返回类型(如 public Student createStudent()),return 后跟一个对象实例(通常由 new 创建或已有引用):
- 返回的仍是该对象在堆中的地址,调用方拿到的是这个地址的副本
- 支持链式调用(如
getUser().getName()),因为每次返回的都是有效引用 - 务必注意判空:若方法可能返回
null,调用方需先检查,否则触发NullPointerException
多态场景下的参数接收更灵活
当方法形参是父类或接口类型时,实参可以是任意子类或实现类的对象:
- 例如
void process(Animal a)可接收Cat、Dog等实例 - 本质仍是传引用副本,但运行时根据实际对象类型决定调用哪个
show()方法 - 这种设计让方法更通用,也体现了面向对象的开闭原则
基本类型与引用类型的对比要拎清
二者都遵循“值传递”,但复制的内容不同:
- 基本类型(
int、boolean):复制栈中数值本身,方法内修改不影响外部 - 引用类型(
String、自定义类、集合):复制栈中存储的地址值,地址相同 → 操作同一堆对象 - 特别提醒:
String虽是引用类型,但不可变;任何“修改”都会新建字符串,原引用不变
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











