Что здесь происходит? Это кажется мне очень странным.
public int v0, v1 = v0++, v2;
Он объявляет всех трех членов экземпляра (я знаю, что они являются членами экземпляра, потому что вы не получаете ошибку), точно так же, как если бы они были объявлены отдельно, и инициализирует одно из них явно значением v0++
, которое является значением v0
до того, как он будет увеличен:
public int v0;
public int v1 = v0++;
public int v2;
Вы могли бы также подумать об этом так:
public int v0;
public int v1;
public int v2;
// (In a constructor)
v1 = v0++;
Что эффективно:
public int v0 = 0;
public int v1 = 0;
public int v2 = 0;
// (In a constructor)
v1 = v0++;
После создания экземпляра переменные будут иметь следующие значения:
v0: 1 Because it was incremented v1: 0 Because it received the value of 'v0' *prior* to the increment v2: 0 Because that the default value for 'int' instance members
Я сказал "члены экземпляра", потому что если это были переменные в методе, а не как члены класса класса, вы получили бы ошибку, жалуясь на то, что вы использовали v0
до его инициализации. (Edit: Er, um, а затем там что-то public
- doh!)
Он равен:
public int v0;
public int v1 = v0++;
public int v2;
Вышеприведенный код даст синтаксическую ошибку: v0, возможно, не был инициализирован или так. И даже после того, как вы попытаетесь отделить vo и v1, код все равно даст вам синтаксическую ошибку.
В основном вы можете так:
public int v0;
public int v1 = v0++;
public int v2;
Это способ добавить несколько переменных более эффективно. Если вы не понимаете v1 = v0++
, это способ сказать v1 = v0; v0 = v0 + 1;
v1 = v0; v0 = v0 + 1;
, Таким образом, v1
получит значение v0
затем v0
wil get + 1
. Итак, пусть v0 = 5
, тогда v0++
→ v1 = 5
и v0 + 1
→ 5 + 1
→ v0 = 6
;
Мне лучше настроить ваши вары так:
public int v0,
v1 = v0++,
v2;
v0++
означает v0 = v0 + 1
(приращение v0). v1 = v0++
означает, что для v1 установлено текущее значение v0, затем увеличивается значение v0 (v0 получает новое значение, v1 будет иметь старое значение v0). v1 = ++v0
означает приращение v0, затем установите v1 в новое значение v0 (оба будут иметь одинаковое значение).
++
не только дает вам увеличенное значение для хранения в другой переменной, но также увеличивает исходную переменную. Положение ++
(до или после имени переменной) также определяет поведение и может давать очень разные результаты! Это относится и к --
также.