一尘不染

我可以在Java中通过引用传递参数吗?

c#

我想要与C#ref 关键字类似的语义。


阅读 234

收藏
2020-05-19

共1个答案

一尘不染

Java令人困惑,因为 一切都是通过值传递的 。但是,对于 引用类型 的参数(即不是原始类型的参数), 引用本身 是通过值传递的,因此它
似乎 是按引用传递的(人们常常声称是)。情况并非如此,如下所示:

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

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

将打印Hello到控制台。如果要打印上面的代码,Goodbye可以 使用 如下所示 的显式引用

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

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