为什么你看到的“传引用”其实是“传值

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"

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。