Java выполняет операцию приращения после возврата по ссылкам на объекты

У меня есть такой код:

public class counter {
    public static void main(String[] args){
        double[] array = new double[10];
        for(int i=0;i<array.length;i++) array[i] = i;
        printArray(array);
        double result = doSomething(array);
        printArray(array);
    }
    public static void printArray(double[] arr){
        for(double d : arr) System.out.println(d);
    }
    public static double doSomething(double[] array){
        return array[0]++;
    }
}

Я узнал, что после оператора return больше не выполняется код, а приращение ++ увеличивает значение в следующем выражении. Поэтому мне кажется логичным, что первый элемент массива array[0] не должен увеличиваться.

Однако выходной массив: {1,1,2,3,4,5,6,7,8,9}

Ваше приращение - это не после оператор возврата. Это внутри - оператор возврата.

khelwood 12.06.2018 11:45

Здесь есть вопрос? Ясно, что то, что вам кажется логичным, не соответствует действительности. variable++ - это выражение, которое возвращает значение, которое переменная имела до увеличения, а также увеличивает переменную до завершения выражения.

Erwin Bolwidt 12.06.2018 11:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

after the return statement no more code is executed

Это правильно. Но ++ - это не после оператор возврата, это Часть этого.

Ваш код эквивалентен:

int temp = array[0];
array[0] = temp + 1;
return temp;

Массив [0] ++ включается в оператор возврата. Следовательно, увеличенное значение сохраняется в массиве [0] (т.е. массив [0] = 1). Не путайте себя, думая, что инкремент будет происходить после оператора return, поскольку он пост-инкремент

Другие вопросы по теме