首页 >后端开发 >C++ >Java 是按值传递还是按引用传递?

Java 是按值传递还是按引用传递?

Susan Sarandon
Susan Sarandon原创
2024-12-31 16:18:10416浏览

Is Java Pass-by-Value or Pass-by-Reference?

理解 Java 的值传递语义

在 Java 中,所有参数都是按值传递的,包括引用类型。这意味着传递给该方法的是引用的实际值,而不是引用本身。这可能会令人困惑,因为看起来引用是按引用传递的,因为对参数引用的对象所做的任何更改都将反映在原始对象中。

但是,这不是真正的按引用传递行为。以下示例演示了这一点:

Object o = "Hello";
mutate(o);
System.out.println(o);

private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!

执行此代码后,输出将为“Hello”。这是因为 mutate 方法接收原始对象引用的副本,而不是原始对象本身。当执行 o = "Goodbye" 行时,它改变了 mutate 方法内部的引用变量 o,但不影响方法外部的原始 o 变量。

要实现真正的按引用传递行为,一种选择是使用显式引用,如下所示:

AtomicReference<Object> ref = new AtomicReference<>("Hello");
mutate(ref);
System.out.println(ref.get()); //Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }

在这种情况下,AtomicReference 包装器保存对原始对象的引用。当 mutate 方法接收到 ref 参数时,它可以直接访问原始对象,并且对该对象所做的任何更改都会反映在方法外的原始对象中。

以上是Java 是按值传递还是按引用传递?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn