Почему не `индекс = индекс ++` `приращение index`?

голоса
0

** Dup: В чем разница между X = X ++; против X ++ ;? **

Так что, хотя я знаю, что вы бы никогда на самом деле сделать это в коде, я все еще любопытно:

public static void main(String[] args) {
    int index = 0;
    System.out.println(index);   // 0
    index++;
    System.out.println(index);   // 1
    index = index++;
    System.out.println(index);   // 1
    System.out.println(index++); // 1
    System.out.println(index);   // 2
}

Обратите внимание , что третий sysoutпо - прежнему 1. На мой взгляд , линия index = index++;означает «установить индекс для индекса, то приращение индекса на 1» таким же образом , System.out.println(index++);означает «передать индекс к Println методу , то приращение индекса на 1».

Это не тот случай, однако. Может кто-нибудь объяснить, что происходит?

Задан 09/12/2008 в 23:00
источник пользователем
На других языках...                            


8 ответов

голоса
4

это дубликат вопрос.

EDIT: Я не могу найти оригинальный: P о хорошо

а = ++ использует postincrement, что ваш компилятор интерпретирует как:

a = function() {
   var old_value = a;
   a++;
   return old_value;
}

EDIT 2: В чем разница между X = X ++; против X ++ ;?

Ответил 09/12/2008 в 23:01
источник пользователем

голоса
3

value++; является пост инкремент.

int firtValue = 9;
int secondValue = firstValue++;

firstValue теперь 10, но SecondValue 9, значение firstValue прежде чем оно было увеличено.

Теперь с преинкрементом:

int firtValue = 9;
int secondValue = ++firstValue;

firstValue и SecondValue теперь 10, fistValue увеличивается, а затем его значение asigned к SecondValue.

Ответил 09/12/2008 в 23:04
источник пользователем

голоса
1

Я никогда не пробовал ничего подобного, но я готов быть, что назначение происходит после приращения.

Так что на самом деле происходит, насколько компилятор обеспокоен является:

  1. Оценка индекса
  2. Держите значение индекса для последующего
  3. Приращение значения индекса
  4. Назначают старое значение индекса, тем самым уничтожить приращение.
Ответил 09/12/2008 в 23:05
источник пользователем

голоса
1

Оператор пост-инкремент index++увеличивает переменную, но возвращает старое значение, таким образом ,

int i = 5;
System.out.println(i++);

напечатает 5 пока я теперь равна 6.

если вы хотите, чтобы вернуть значение после использования операции инкремента ++index

Ответил 09/12/2008 в 23:04
источник пользователем

голоса
1

Назначение происходит после того, выражение было оценено. Таким образом, индекс ++, имеет значение 0, хотя, как индекс побочный эффект увеличивается. Тогда значение (0) присваивается индекс.

Ответил 09/12/2008 в 23:02
источник пользователем

голоса
0

Вы должны смотреть на вещи для того, оцениваются.

в следующем заявлении

Индекс = Индекс ++;

три вещи: 1), так как это индекс ++, значение индекса определяется 2) индекс получает приращение, 3) значение, которое было определено на этапе одной затем присваивается переменной на левой стороне уравнения

Ответил 09/12/2008 в 23:06
источник пользователем

голоса
-1

См http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html информации о правилах оценки постфикса.

Также см http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39438 информации.

Ответил 09/12/2008 в 23:06
источник пользователем

голоса
-1

Ответ на этом вопрос должен помочь. Приращение поста делает обновить значение индекса , но он возвращает значение перед обновлением.

Ответил 09/12/2008 в 23:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more