具有三元表达式的后缀增量运算符显示意外行为
Postfix-Incrementoperator with ternary expression shows unexpected behavior
我无法理解此行为:
我的意图是 numberOfFilesNotFolders
增加 1。
假设该文件不是目录。
案例 1:
int numberOfFilesNotFolders = 0;
numberOfFilesNotFolders = file.isDirectory() ? numberOfFilesNotFolders : numberOfFilesNotFolders++;
numberOfFilesNotFolders
保持 0
案例 2:
int numberOfFilesNotFolders = 0;
numberOfFilesNotFolders = file.isDirectory() ? numberOfFilesNotFolders : numberOfFilesNotFolders+1;
numberOfActualFilesNotFolders
递增成为1
我不明白为什么情况 1 不起作用。在我看来,它应该是这样工作的:
file.isDirectory()
解析为 false
numberOfFilesNotFolders++
将值 0 存入 numberOfFilesNotFolders
numberOfFilesNotFolders++
做递增
步骤 3. 然后应将 numberOfFilesNotFolders
的值更改为 1,然后应设置该值。
但实际上 numberOfFilesNotFolders
保持为 0。而且我不明白。
如果有人能详细说明为什么它保持为 0,那就太好了。
问候
工具
因为它是 post 增量?基本上你的陈述被评估为。
numberOfFilesNotFolders = numberOfFilesNotFolders
这是实际发生的步骤。
file.isDirectory()
我们评价为真
numberOfFilesNotFolders++
return临时变量0,numberOfFilesNotFolders
加1。
- 您将
numberOfFilesNotFolders++
操作的临时值分配给 numberOfFilesNotFolders
并且 numberOfFilesNotFolders
再次等于 0
。
如果您将语句更改为带有预增量的 ++numberOfFilesNotFolders
,您将获得预期的结果。
否则你也可以简单地使用 if 语句而不是使用三元运算符。
我无法理解此行为:
我的意图是 numberOfFilesNotFolders
增加 1。
假设该文件不是目录。
案例 1:
int numberOfFilesNotFolders = 0;
numberOfFilesNotFolders = file.isDirectory() ? numberOfFilesNotFolders : numberOfFilesNotFolders++;
numberOfFilesNotFolders
保持 0
案例 2:
int numberOfFilesNotFolders = 0;
numberOfFilesNotFolders = file.isDirectory() ? numberOfFilesNotFolders : numberOfFilesNotFolders+1;
numberOfActualFilesNotFolders
递增成为1
我不明白为什么情况 1 不起作用。在我看来,它应该是这样工作的:
file.isDirectory()
解析为 falsenumberOfFilesNotFolders++
将值 0 存入numberOfFilesNotFolders
numberOfFilesNotFolders++
做递增
步骤 3. 然后应将 numberOfFilesNotFolders
的值更改为 1,然后应设置该值。
但实际上 numberOfFilesNotFolders
保持为 0。而且我不明白。
如果有人能详细说明为什么它保持为 0,那就太好了。
问候 工具
因为它是 post 增量?基本上你的陈述被评估为。
numberOfFilesNotFolders = numberOfFilesNotFolders
这是实际发生的步骤。
file.isDirectory()
我们评价为真numberOfFilesNotFolders++
return临时变量0,numberOfFilesNotFolders
加1。- 您将
numberOfFilesNotFolders++
操作的临时值分配给numberOfFilesNotFolders
并且numberOfFilesNotFolders
再次等于0
。
如果您将语句更改为带有预增量的 ++numberOfFilesNotFolders
,您将获得预期的结果。
否则你也可以简单地使用 if 语句而不是使用三元运算符。