2015-11-17 40 views
0

我理解這種行爲的一個問題:後綴-Incrementoperator與三元表達式顯示意外的行爲

我的本意是,numberOfFilesNotFolders得到由1

遞增Asuming該文件是不是一個目錄。

殼體1:

int numberOfFilesNotFolders = 0; 
numberOfFilesNotFolders = file.isDirectory() ? numberOfFilesNotFolders : numberOfFilesNotFolders++; 

numberOfFilesNotFolders撐0


殼體2:

int numberOfFilesNotFolders = 0; 
numberOfFilesNotFolders = file.isDirectory() ? numberOfFilesNotFolders : numberOfFilesNotFolders+1; 

numberOfActualFilesNotFolders被遞增並且變成1


我不明白爲什麼情況1不起作用。我看到它的方式,它應該像這樣工作:

  1. file.isDirectory()解析爲假
  2. numberOfFilesNotFolders++存儲值0到numberOfFilesNotFolders
  3. numberOfFilesNotFolders++確實的增量

第3步應該再將numberOfFilesNotFolders的值更改爲1,然後應該設置該值。

但實際上numberOfFilesNotFolders保持0而我不明白。

如果有人能闡述爲什麼它保持0,那將是巨大的。

招呼 工具

+1

用'++ numberOfFilesNotFolders'再試一次,你會看到。 – Tunaki

+1

'x = x ++'常常是一個錯誤...... – assylias

回答

2

因爲it's後增量?基本上你的聲明被評估爲。

numberOfFilesNotFolders = numberOfFilesNotFolders 

這是實際發生的步驟。

  1. file.isDirectory()我們一個判斷爲真
  2. numberOfFilesNotFolders++回報0和增量numberOfFilesNotFolders臨時變量。
  3. 您將numberOfFilesNotFolders++操作的臨時值分配給numberOfFilesNotFoldersnumberOfFilesNotFolders再次等於0

如果您使用預增量將語句更改爲++numberOfFilesNotFolders,您將獲得預期結果。

否則,你也只是簡單地使用,而不是使用三元運算符if語句。

+0

所以它是:'numberOfActualFilesNotFoldersTemp = numberOfActualFilesNotFolders;'然後'numberOfActualFilesNotFolders = numberOfActualFilesNotFolders +1;'然後'numberOfActualFilesNotFolders numberOfActualFilesNotFoldersTemp' – tool

+0

最後一行忽略了** = **和**; **。它的意思是:'numberOfActualFilesNotFolders = numberOfActualFilesNotFoldersTemp;' – tool