在java中通过引用传递?

Evr*_*urk 2 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!
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 13

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

  1. 传递数组中的数据:

    void swap(SomeType[] args) {
        SomeType temp = args[0];
        args[0] = args[1];
        args[1] = temp;
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    void swap(SomeTypeContainer c) {
        SomeType temp = c.a;
        c.a = c.b;
        c.b = temp;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这与#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
    
    Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的精彩解释。 (2认同)