Синтаксис Java: почему это объявление переменной работает?

1

Что здесь происходит? Это кажется мне очень странным.

public int v0, v1 = v0++, v2;
Теги:
variables
syntax

4 ответа

4
Лучший ответ

Он объявляет всех трех членов экземпляра (я знаю, что они являются членами экземпляра, потому что вы не получаете ошибку), точно так же, как если бы они были объявлены отдельно, и инициализирует одно из них явно значением 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!)

  • 1
    Спасибо, я ценю это!
4

Он равен:

public int v0;
public int v1 = v0++;
public int v2;
  • 0
    Понятно! Я неправильно понял и подумал, что это множество v0 И v1 равное приращению v0 и новой переменной v2 соответственно.
  • 0
    Нет проблем, посмотрите на ответ @TJ Crowder для более подробного объяснения.
0

Вышеприведенный код даст синтаксическую ошибку: v0, возможно, не был инициализирован или так. И даже после того, как вы попытаетесь отделить vo и v1, код все равно даст вам синтаксическую ошибку.

  • 0
    В самом деле? , , , :)
  • 0
    @ADTC: да! ... :)
Показать ещё 1 комментарий
0

В основном вы можете так:

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 + 15 + 1v0 = 6;

Мне лучше настроить ваши вары так:

public int v0, 
           v1 = v0++,
           v2;
  • 0
    v0++ означает v0 = v0 + 1 (приращение v0). v1 = v0++ означает, что для v1 установлено текущее значение v0, затем увеличивается значение v0 (v0 получает новое значение, v1 будет иметь старое значение v0). v1 = ++v0 означает приращение v0, затем установите v1 в новое значение v0 (оба будут иметь одинаковое значение).
  • 1
    Я заметил ваше изменение, но вы все еще ошибаетесь. ++ не только дает вам увеличенное значение для хранения в другой переменной, но также увеличивает исходную переменную. Положение ++ (до или после имени переменной) также определяет поведение и может давать очень разные результаты! Это относится и к -- также.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню