在java中通过引用传递?

时间:2012-02-23 11:13:34

标签: java android pass-by-reference

我正在尝试为Android GSM构建一个litle gam。我有很多单位,所有单位都有目的地。要计算目的地我正在使用一个名为 CalDes 的函数。此功能 CalDes 正在计算我单位的速度。所以我发送了一些我必须编辑的变量并再次使用它们。为此,我必须参考这些变量。这里有一个简单的C ++如何在java中做到这一点?

void swap(SomeType& arg1, Sometype& arg2) {
    SomeType temp = arg1;
    arg1 = arg2;
    arg2 = temp;
}
...
SomeType var1 = ...; // value "A"
SomeType var2 = ...; // value "B"
swap(var1, var2); // swaps their values!

3 个答案:

答案 0 :(得分:13)

Java根本没有pass-by-reference。你有几个选择:

  1. 将数据传递到数组中:

    void swap(SomeType[] args) {
        SomeType temp = args[0];
        args[0] = args[1];
        args[1] = temp;
    }
    

    ...但使用它是调用代码的一个难点:

    SomeType a = ...;
    SomeType b = ...;
    SomeType[] args = new SomeType[] { a, b };
    swap(args);
    a = args[0];
    b = args[1];
    
  2. 创建一个具有公共SomeType成员的对象,并传入对象引用。

    void swap(SomeTypeContainer c) {
        SomeType temp = c.a;
        c.a = c.b;
        c.b = temp;
    }
    

    这与#1非常相似,但通过调用代码可能更方便。

    SomeTypeContainer c = new SomeTypeContainer(/* ... something that creates a and b ... */);
    // Use c.a and c.b directly
    swap(c);
    // Use c.a and c.b directly, they're now swapped
    

答案 1 :(得分:2)

答案 2 :(得分:1)

在Java中,每个对象总是通过引用传递。但是你不能通过引用传递变量。如果你真的需要它,你必须再使用一个间接。