Cas*_*ton 9 java pass-by-reference
我是一个完整的Java菜鸟.我知道Java将所有参数视为按值传递,并且还有其他一些线程可供人们解释.
例如,在C++中我可以这样做:
void makeAThree(int &n)
{
n = 3;
}
int main()
{
int myInt = 4;
makeAThree(myInt);
cout << myInt;
}
Run Code Online (Sandbox Code Playgroud)
哪个将输出3.我知道在Java中,所有参数都是按值传递的,因此您无法操纵传入的参数.是否有一种标准的方法来模拟 Java中的引用传递?有没有办法调用一个操作传入的变量的函数?我很难理解无法做到这一点的想法.
Mar*_*ers 15
模拟传递引用的主要方法是传递保存该值的容器.
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());
}
Run Code Online (Sandbox Code Playgroud)
由于在Java中,它引用到由值(对象本身是从来没有在全部通过)传递的对象,设置ref于3在makeAThree变化相同的对象提到了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;
}
}
Run Code Online (Sandbox Code Playgroud)
这并不是说修改方法的参数是很好的做法.通常这会被视为副作用.通常,最佳做法是将方法的输出限制为返回值this(如果方法是实例方法).修改参数是一种非常"C"的方法来设计方法,并且不能很好地映射到面向对象的编程.
| 归档时间: |
|
| 查看次数: |
8931 次 |
| 最近记录: |