具有三元表达式的Postfix-Incrementoperator显示意外行为

时间:2015-11-17 09:49:35

标签: java expression ternary

我在理解这种行为时遇到了问题:

我的意图是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不起作用。我看待它的方式,它应该像这样工作:

  1. file.isDirectory()解析为false
  2. numberOfFilesNotFolders++将值0存储到numberOfFilesNotFolders
  3. numberOfFilesNotFolders++执行增量
  4. 步骤3.然后应将numberOfFilesNotFolders的值更改为1,然后应将其设置。

    但实际上numberOfFilesNotFolders保持为0.而且我不明白。

    如果有人可以详细说明为什么它保持为0,那就太棒了。

    招呼 工具

1 个答案:

答案 0 :(得分:2)

因为它是一个后期增量?基本上你的陈述被评估为。

numberOfFilesNotFolders = numberOfFilesNotFolders

这是实际发生的步骤。

  1. file.isDirectory()我们评价为真
  2. numberOfFilesNotFolders++返回临时变量0并将numberOfFilesNotFolders递增1。
  3. 您将numberOfFilesNotFolders++操作的临时值分配给numberOfFilesNotFoldersnumberOfFilesNotFolders再次等于0
  4. 如果您使用preincrement将语句更改为++numberOfFilesNotFolders,您将获得预期结果。

    否则你也可以只使用if语句而不是使用三元运算符。