Java 中按引用传递参数:澄清
与普遍看法相反,Java 不支持以相同方式按引用传递参数作为 C# 的 ref 关键字。然而,这种看法源于这样一个事实:对于引用类型参数,引用本身是按值传递的。
在 Java 中,所有参数都是按值传递的。当引用类型参数传递给方法时,将创建该引用的副本。这意味着对方法内的引用所做的更改不会影响方法外部的引用。
为了说明这一点,请考虑以下示例:
Object o = "Hello"; mutate(o); System.out.println(o); //Hello private void mutate(Object o) { o = "Goodbye"; }
上面的代码将打印“你好”到控制台。这说明 mutate 方法内部的引用 o 与方法外部的引用不同。
如果要修改引用本身,则必须使用显式引用类型参数,例如 java.util.concurrent.atomic.AtomicReference
AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
在这种情况下,ref 参数通过引用传递,并且引用的值在 mutate 方法中修改。结果,代码将打印“再见!”到控制台。
以上是Java 是按引用传递参数还是按值传递参数?如何实现类似引用的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!