在 Java 中通过引用传递参数
在 Java 中,每个参数都是按值传递的,这可能看起来违反直觉,特别是如果您来自 C# 等支持引用传递的语言。但是,其语义在本质上略有不同。
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 引用不同,支持按值传递语义。
真实引用传递的选项
要实现真正的按引用传递行为,可以使用以下方法:
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
在这种情况下, AtomicReference 提供了对象的包装器,并且它的引用真正是按值传递的。对 mutate() 内的引用进行赋值将影响方法外部的引用,从而产生所需的引用传递行为。
以上是Java 是按引用还是按值传递参数?的详细内容。更多信息请关注PHP中文网其他相关文章!