2016-06-17 3 views
0

У меня есть следующие строки на мой код:Почему ++ не добавит к целочисленное значение

Log.d ("Playlist", "Current Song Number is: "+ currentSongNumber); 

    currentSongNumber = currentSongNumber++; 

    Log.d ("Playlist", "Current Song Number has changed to: "+ currentSongNumber); 

Но я получаю результат:

Current Song Number is: 2 
Current Song Number has changed to: 2 

Так почему же он не chaged до трех does ++ работает только при итерации?

+0

Просто введите 'currentSongNumber ++' –

+0

Он будет прочитайте текущее значение 2, приращение до 3 и снова назначьте ранее прочитанное значение 2. – Thomas

+0

Различия между базой Java между var ++ и ++ var и присваиванием http://ideone.com/L4yx7d – Selvin

ответ

4

Оператор post-increment возвращает значение old, а затем увеличивает его. При назначении обратно той же переменной вы отбрасываете приращение, выполняемое переменной.

Так что, когда вы делаете

currentSongNumber = currentSongNumber++; 

это эквивалентно следующему коду:

int oldValueOfCurrentSongNumber = currentSongNumber; 
currentSongNumber = currentSongNumber + 1; 
currentSongNumber = oldValueOfCurrentSongNumber; // This is because of your assignment 
+0

почему он присваивает старую ценность –

1

Попробуйте ввести только этот код: currentSongNumber ++;

1

Поскольку вы используете пост инкремент

так либо попробовать этот

currentSongNumber = ++currentSongNumber; 

или это

currentSongNumber++; 

или это

++currentSongNumber; 
1

Вы используете пост инкремент. Нажмите here, чтобы увидеть разницу между предварительным приращением и пошаговым приращением. В коде попробуйте pre increment.

++currentSongNumber;

Это даст вам желаемый результат.

В вашем коде, если вы используете currentSongNumber = currentSongNumber++;, то сначала будет присвоено значение currentSongNumber, которое будет таким же, как и предыдущее, и будет иметь значение приращение.

Или вы можете просто использовать currentSongNumber = currentSongNumber+1;, чтобы избежать путаницы.

+0

'++' - синтаксический сахар, который позволяет писать только 'currentSongNumber ++'. Вы не должны поощрять OP писать эту бесполезную аффектацию. '++ currentSongNumber' или' currentSongNumber ++ 'достаточно здесь. –

1

Просто попробуйте это дома:

Log.d ("Playlist", "Current Song Number is: "+ currentSongNumber); 

    currentSongNumber++; 

    Log.d ("Playlist", "Current Song Number has changed to: "+ currentSongNumber); 
Смежные вопросы