我可以在Java中通过引用传递参数吗?
我想要类似于 ref 关键字的语义。
C#
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"); }
我可以在Java中通过引用传递参数吗?
不。
为什么?Java只有一种将参数传递给方法的模式:按值。
注意:
对于基元,这很容易理解:您将获得值的副本。
对于所有其他引用,您将获得引用的副本,这也称为按值传递。
这一切都在这张照片中: