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

2022-08-31 07:22:09

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


答案 1

Java令人困惑,因为一切都是按值传递的。然而,对于引用类型的参数(即不是基元类型的参数),它是按值传递的引用本身,因此它似乎是逐个引用的(人们经常声称它是)。事实并非如此,如下图所示:

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

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

将打印到控制台。如果要打印上述代码,则选项是使用显式引用,如下所示:HelloGoodbye

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

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

答案 2

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

不。

为什么?Java只有一种将参数传递给方法的模式:按值。

注意:

对于基元,这很容易理解:您将获得值的副本。

对于所有其他引用,您将获得引用的副本,这也称为按值传递。

这一切都在这张照片中:

enter image description here