企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### [方法调用中的别名现象](https://lingcoder.gitee.io/onjava8/#/book/04-Operators?id=%e6%96%b9%e6%b3%95%e8%b0%83%e7%94%a8%e4%b8%ad%e7%9a%84%e5%88%ab%e5%90%8d%e7%8e%b0%e8%b1%a1) 当我们把对象传递给方法时,会发生别名现象。 ~~~ // operators/PassObject.java // 正在传递的对象可能不是你之前使用的 class Letter { char c; } public class PassObject { static void f(Letter y) { y.c = 'z'; } public static void main(String[] args) { Letter x = new Letter(); x.c = 'a'; System.out.println("1: x.c: " + x.c); f(x); System.out.println("2: x.c: " + x.c); } } ~~~ 输出结果: ~~~ 1: x.c: a 2: x.c: z ~~~ 在许多编程语言中,方法`f()`似乎会在内部复制其参数**Letter y**。但是一旦传递了一个引用,那么实际上`y.c ='z';`是在方法`f()`之外改变对象。别名现象以及其解决方案是个复杂的问题,在附录中有包含:[对象传递和返回](https://lingcoder.gitee.io/onjava8/#/./Appendix-Passing-and-Returning-Objects)。意识到这一点,我们可以警惕类似的陷阱。