Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Замена значений 2-х переменных

#java


Подскажите, пожалуйста. Как заставить это работать? 

public static void main(String[] args) {
  int a = 0;
  int b = 3;
  swap(a, b);
}

public static void swap (int x, int y){
  int tmp = x;
  x = y;
  y = tmp;
}

    


Ответы

Ответ 1



Примитивы передаются не по ссылке. В вашем коде меняются лишь локальные копии на стеке в методе swap. Можно завернуть во что-то. Часто делают так: public class IntRef { public int value; public IntRef (int val) { value = val; } } Тогда ваш код будет таким: public static void main(String[] args) { IntRef a = new IntRef(0); IntRef b = new IntRef(3); swap(a,b); } public static void swap (IntRef x, IntRef y){ int tmp = x.value; x.value = y.value; y.value = tmp; }

Ответ 2



В джаве нет передачи переменных по ссылке, поэтому сделать swap двух переменных невозможно. Можно менять поля у объектов, но получается, что вместо двух переменных нужно иметь 2 поля (2 поля у одного объекта, либо по 1 полю у двух объектов), но это явно не то, что имело бы смыл делать.

Комментариев нет:

Отправить комментарий