Вы не можете, именно потому, что Integer
является неизменным (наряду с другими примитивными типами обёрток). Если бы у вас был изменяемый класс-обертка, было бы хорошо:
public final class MutableInteger {
{
private int value;
public MutableInteger(int value) {
this.value = value;
}
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
void swap(MutableInteger a, MutableInteger b) {
int c = a.getValue();
a.setValue(b.getValue());
b.setValue(c);
}
Однако из-за отсутствия эквивалента setValue
в Integer
, в принципе, нет способа выполнить то, что вы просите. Это хорошо. Это означает, что для большинства случаев, когда мы можем захотеть передать значение Integer
другому методу, нам не нужно беспокоиться о том, является ли метод будет мутировать его. Неизменность делает рассуждение о вашем коде намного проще, без необходимости тщательно отслеживать, что делает каждый метод, на случай, если он изменит ваши данные под вашими ногами.