import java.lang.reflect.Field;
public class IntegerSwap {
public class IntWrapper {
private int value;
public IntWrapper(int value){
this.value = value;
}
public int get(){
return this.value;
}
public void set(int value){
this.value = value;
}
}
public static void main(String[] args) {
IntegerSwap is = new IntegerSwap();
Integer a = 10;
Integer b = 20;
is.swap(a, b);
System.out.println("a : " + a +", b : " + b);
}
/**
* This solution has bad effect on the jvm. It changes the value of the object
* everywhere in the running JVM.
*
**/
public void swap(Integer aArg , Integer bArg){
try {
Field valueField = Integer.class.getDeclaredField("value");
valueField.setAccessible(true);
int temp = aArg;
valueField.setInt(aArg, valueField.getInt(bArg));
valueField.setInt(bArg,temp);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
public void swap(IntWrapper aArg , IntWrapper bArg){
IntWrapper temp = new IntWrapper(aArg.get());
aArg.set(bArg.get());
bArg.set(temp.get());
}
}