最佳答案
你的问题归结为你想要一个整洁和可重用的方式来交换交换一对裸变量的值. (我知道你想有条件地这样做,但是对于无条件的情况更容易解释.)
原文链接:https://www.f2er.com/java/438005.html不幸的是,在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 …而且我确信有一些不太模糊的例子):
int a = 1;
int b = 2;
a,a);
不幸的是,Java中没有这些机制.你能做的最好的就是使用某种可变的包装类而不是简单的原始类型;例如
IntHolder a = new IntHolder(1);
IntHolder b = new IntHolder(2);
swap(a,b);
跟进
可以使用AtomicType或Apache Commons的MutableInteger等现有类型作为包装类.我推荐后者,因为它稍快一点.此外,使用AtomicType实例并不意味着您可以原子方式实现swap方法.