Не меняется значение на выходе из функции

208
27 апреля 2017, 14:05

Описано два класса в одном пекедже. В первом описание объекта и методы, в другом эти методы должны выполняться. В первом классе описан метод, который должен задавать значение полям– при выводе значений a и b внутри функции все работает так, как и планировалось. Но при выводе a.trait,b.traitв телеmainзначенияa.trait,b.trait` равны нулю. В чем может быть проблема?

public class Person {
        int trait;
        public static void input(int a, int b){...}
}

public class Thing {
    public static void main(String[] args) throws InterruptedException {
        Person a = new Person();
        Person b = new Person();
        Person.input(a.trait, b.trait);
    }
}
Answer 1

Существует два основных метода передачи параметров: вызов по значению (pass-by-value) и вызов по ссылке (pass-by-reference). В Java, для передачи параметров (как примитивных типов, так и ссылочных) используется первый метод – вызов по значению.

В случае pass-by-value, значение аргумента копируется в формальный параметр метода.

Вы передаете в метод два параметра примитивного типа, далее в методе Вы работаете с копиями переданных значений, а изменение копии переданного аргумента (примитивного типа) никоим образом не влечет за собой изменение оригиналов.

В случае передачи аргументов объектного типа, в метод передается копия ссылки, и, следовательно, изменения объекта внутри метода влияют на объект, который используется в качестве аргумента.

Answer 2

Проблема в том, что у объектов а и b конструктор без аргументов, значит их поля traint равны нулю, соответственно ты и передаёшь нули в метод input. Соответственно вам надо или назначить их после создания объекта, или сделать конструктор где эти переменные зададутся

READ ALSO
Android Studio ошибка запуска приложения на своем девайсе (Xiaomi)

Android Studio ошибка запуска приложения на своем девайсе (Xiaomi)

Пытаюсь запустить приложение на своем девайсе но постоянно выскакивает эта ошибка

400
Отличие JavavCV 2.4.x и 3.х.х [требует правки]

Отличие JavavCV 2.4.x и 3.х.х [требует правки]

Подскажите пожалуйста, имеются ли кардинальные различия между этими двумя релизами библиотеки и какой из них лучше использовать, если мне...

197
entity manager query order by select count

entity manager query order by select count

сам sql запрос:

258
Spinner в AlertDialog. setAdapter()

Spinner в AlertDialog. setAdapter()

Уважаемые знатоки, мне необходимо добавить Spinner со слушателем в AlertDialogНасколько я понял, для этого необходимо воспользоваться setAdapter, но не понимаю,...

257