Передача по ссылке в Java? - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь создать небольшую игру для Android GSM.У меня много юнитов, и у всех есть пункты назначения.Для расчета пункта назначения я использую функцию 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 ]

13 голосов
/ 23 февраля 2012

Java вообще не имеет передачи по ссылке. У вас есть несколько вариантов:

  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
    
2 голосов
/ 23 февраля 2012

Невозможно на Java, читать: http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

1 голос
/ 23 февраля 2012

В Java каждый объект всегда передается по ссылке. Но вы не можете передавать переменные по ссылке. Если вам это действительно нужно, вы должны использовать еще одно косвенное указание.

...