为什么你看到的“传引用”其实是“传值
1. 一段有趣又令人困惑的代码
public static void main(String[] args) {
String x = new String("ab");
change(x);
System.out.println(x);
}
public static void change(String x) {
x = "cd";
}
这段代码输出的是 "ab"。
作为对比,C++ 中类似的写法:
void change(string &x) {
x = "cd";
}
int main() {
string x = "ab";
change(x);
cout << x << endl;
}
输出的是 "cd"。
为什么行为不同?这背后是 Java 和 C++ 在参数传递机制上的根本差异。
2. 常见误解分析
很多人会这样理解:
变量
x存储的是指向堆中"ab"字符串对象的引用。当x作为参数传入change()方法时,它仍然指向"ab"。

本章节需登录后查看完整内容,当前为预览。
登录后阅读全文Course Curriculum
1
编程根基:数据结构、算法与系统基础
掌握常用数据结构与算法思想,理解操作系统进程/内存管理及网络 TCP/IP 模型,为后续性能分析、并发设计和系统调优提供底层认知支撑。
2
Java 内核:JVM 与并发编程
深入 JVM 内存布局、垃圾回收机制与 Java 内存模型,熟练使用并发工具类与锁原语,写出线程安全、低延迟、可诊断的高性能 Java 代码。
3
框架与 I/O:Spring、Netty 与 Web 容器
理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4
高性能中间件:消息、缓存与存储
熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
5
架构能力:高可用、DDD 与系统设计
基于领域驱动设计划分限界上下文,结合限流、熔断、多活容灾等手段,设计可演进、可观测、故障自愈的大规模业务系统。