gpt4 book ai didi

java - 如何在 Java 中模拟引用传递?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:42 24 4
gpt4 key购买 nike

我是一个彻头彻尾的 Java 菜鸟。我知道 Java 将所有参数都视为按值传递,并且还有其他几个线程对此进行了解释。

例如,在 C++ 中我可以这样做:

void makeAThree(int &n)
{
n = 3;
}
int main()
{
int myInt = 4;
makeAThree(myInt);
cout << myInt;
}

这将输出 3。我知道在 Java 中,所有参数都是按值传递的,因此您不能操作传入的参数。有没有一种标准方法可以在 Java 中模拟按引用传递?有没有办法调用一个函数来操作传入的变量?我很难接受没有办法做到这一点的想法。

最佳答案

模拟传递引用的主要方式是传递一个包含值的容器。

static void makeAThree(Reference<Integer> ref)
{
ref.set(3);
}

public static void main(String[] args)
{
Reference<Integer> myInt = new Reference<>(4);
makeAThree(myInt);
System.out.println(myInt.get());
}

因为在 Java 中,它是对按值传递的对象的引用(对象本身根本不会被传递),设置ref3makeAThree更改 myInt 引用的同一对象在 main() .

免责声明:Reference不是一个可以与开箱即用的 Java 一起使用的类。我在这里将它用作任何其他对象类型的占位符。这是一个非常简单的实现:

public class Reference<T> {
private T referent;

public Reference(T initialValue) {
referent = initialValue;
}

public void set(T newVal) {
referent = newVal;
}

public T get() {
return referent;
}
}

编辑

这并不是说修改方法的参数是一种很好的做法。通常这会被认为是副作用。通常最好将方法的输出限制为返回值和 this (如果方法是实例方法)。修改参数是一种非常“C”的方法设计方式,不能很好地映射到面向对象的编程。

关于java - 如何在 Java 中模拟引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com