К чему сводится ваш вопрос, так это то, что вам нужен аккуратный и многократно используемый способ обмена значениями пары пустых переменных. (Я знаю, что вы хотите сделать это условно, но это легче объяснить для безусловного случая.)
К сожалению, в Java нет способа сделать это. Различные механизмы языка программирования, которые гипотетически могут быть использованы для этого, недоступны в Java. Вот резюме:
В некоторых языках это можно сделать с помощью вызова по ссылке (например, FORTRAN) или передачи параметров INOUT (например, ObjectiveC):
int a = 1;
int b = 2;
swap(a, b);
В некоторых языках вы можете имитировать вызов по ссылке, передавая адреса (например, C и C ++):
int a = 1;
int b = 2;
swap(&a, &b);
В некоторых языках есть оператор присваивания кортежей (например, Perl):
int a = 1;
int b = 2;
a, b = {b, a};
// or ...
a, b = swap(b, a); // where swap returns an explicit or implicit tuple.
В некоторых языках процедуры / методы могут возвращать несколько результатов, и существует специальный синтаксис для присвоения отдельных результатов другой переменной (например, Mesa ... и я уверен, что есть менее смутные примеры): 1024 *
int a = 1;
int b = 2;
a, b = swap(b, a);
К сожалению, ни один из этих механизмов не доступен в Java. Лучшее, что вы можете сделать, - это использовать некий изменяемый класс-обертку вместо простых примитивных типов; например,
IntHolder a = new IntHolder(1);
IntHolder b = new IntHolder(2);
swap(a, b);
Followup
Можно использовать существующие типы, такие как AtomicType
или Apache Commons 'MutableInteger
, в качестве класса-оболочки. Я бы порекомендовал последний, так как он немного быстрее. Кроме того, использование AtomicType
экземпляров не означает, что вы можете реализовать метод swap
атомарно.