Передача аргументов методу

583
04 января 2017, 02:15

При передаче объекта в качестве параметра методу ссылка должна копироваться. Тогда почему вывод 0 9 9, а не 9 9 9? Получается, s1 и s2 ссылаются на разные объекты?

public class Main {
    public static void main(String[] args) {
        Integer s = 0;
        foo(s, s = 9);
        System.out.println(s);
    }
    static void foo(Integer s1, Integer s2) {
        System.out.println(s1);
        System.out.println(s2);
    }
}
Answer 1

Параметры вычисляются слева направо, и поэтому s1 и s2 ссылаются на разные объекты. Если вы напишите

foo(s = 9, s);

То получите 9 9 9. Так как в этом случае операция = выполнится перед вычислением второго параметра. Ваш код равнозначен (за исключением того, что никаких новых переменных нет):

Integer s = 0;
// "раскрыл скобки" для foo(s, s = 9);
Integer old_s = s;
s = 9;
foo(old_s, s);
// "раскрыл скобки"
System.out.println(s);
Answer 2

Это происходит потому, что вы - сначала отправляете в первый аргумент, а во втором вы переопределяете переменную на 9. Одну и туже переменную вы, можете переопределять неограниченное кол.-во раз, только в том случае, если она не final.

Integer i = 1;
i = i * 2;
i = i + i;
i-=1;
READ ALSO
Как правильно организовать экспорт в Excel в Spring-MVC

Как правильно организовать экспорт в Excel в Spring-MVC

Добрый деньЕсть контроллер в котором есть метод поиска

487
Пример запроса Twitter Api android

Пример запроса Twitter Api android

Не могу найти ни один пример запроса Twitter Api androidЕсли кто может - предоставьте пример выполнения такого запроса в android

626
MouseListener в Java

MouseListener в Java

Как отловить события mousePressed и mouseReleased где в этот момент находится курсор, а потом получить объект над которым это событие происходит? Можно...

585
Screen overlay после появление окна с permissions

Screen overlay после появление окна с permissions

Получаю "Screen overlay detected, To change this permission setting", you first have to turn off the screen overlay from Settings > Apps" (на Samsung S7 Edge), после нажатия Allow в окне с permissions, на Samsung S6 такой...

463