别慌,Java只有值传递——一次搞懂“为啥我改了它还不变”!

亲爱的程序员兄弟姐妹们:

是不是有那么一瞬间,你写着写着代码,突然怀疑人生:

ini 复制代码
int a = 1;
int b = a;
a = 2;
System.out.println(b);  // 结果是1,没变!

User user = new User("张三");
User user1 = user;
user = new User("李四");
System.out.println(user1.getName());  // 结果还是张三,没变!

这是不是耍我?

别慌,今天咱们用箱子和标签这个有趣的比喻,帮你一次性搞清楚!


一、Java的铁律:只有值传递!

无论是:

  • 基本数据类型(int、double、char...)
  • 引用数据类型(对象、数组、集合...)

Java 永远都是值传递


二、基本数据类型:值传递------我拿的是实物

ini 复制代码
int a = 1;
int b = a;
a = 2;
System.out.println(b);  // 输出1
  • 这里的 ab 像是两个独立的小箱子
  • 开始时,你把 1 这个"苹果"放到了两个箱子里。
  • 改变 a 之后,b 还是原来那个箱子,彼此完全独立

✅ 关键:

  • 基本类型赋值时是值的副本(实物副本)
  • 改变一个,对另一个没任何影响。

三、引用数据类型:地址传递------我拿的是标签

ini 复制代码
User user = new User("张三");
User user1 = user;
user = new User("李四");
System.out.println(user1.getName());  // 张三
  • useruser1 拿到的其实是同一张房子地址的标签
  • user = new User("李四"),只是换了个新房子user1 还拿着原来的老房子("张三")的地址。

✅ 关键:

  • 引用类型赋值时,复制的是地址标签
  • 改变标签指向(新 new 一个对象),不会影响其他手持旧标签的人。
  • 只有改房子内部装修(改对象属性) ,其他人才会感知到。

四、经典对比表格:

类型 赋值时复制的内容 修改是否影响副本 改变引用是否影响副本
基本类型(int) 实际值 ❌ 不影响 不适用
引用类型(对象) 地址(引用值) ✅ 改内容会影响 ❌ 改引用无影响

五、最通俗的比喻:

  • 基本类型 : 就像你给朋友送了一个真正的苹果🍎。你吃掉你自己的,他的还是完整的------实物副本
  • 引用类型: 就像你俩拿着同一间房子的钥匙🔑。房子改造了,谁进来看都是新样子。 但如果你丢了钥匙🗝换了一套新房子,朋友手里还是老钥匙------地址没变,房子还是原来的房子。

六、总结发布版:

  • Java 只有值传递,全世界都一样
  • 基本类型:给实物,互不影响。
  • 引用类型:给地址,改对象影响彼此,改指针不影响。
相关推荐
不知名的老吴4 分钟前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver14 分钟前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
云烟成雨TD43 分钟前
Spring AI 1.x 系列【56】用大模型评判大模型:递归顾问实现自动化评估方案
人工智能·spring·自动化
杨了个杨89821 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
陈鋆2 小时前
Spring AI Framework(二:模块分析)
spring·ai
IT_陈寒2 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海2 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
小小前端仔LC3 小时前
Node.js + LangChain + React:搭建个人知识库(六)- “吃什么”项目实战:从700+菜谱入库到Taro H5端JSON渲染
前端·后端
马士兵教育3 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
程序员黑豆3 小时前
AI全栈开发之Java:怎么配置Java环境变量
前端·后端·ai编程