具有三元表达式的后缀增量运算符显示意外行为

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 不起作用。在我看来,它应该是这样工作的:

  1. file.isDirectory() 解析为 false
  2. numberOfFilesNotFolders++ 将值 0 存入 numberOfFilesNotFolders
  3. numberOfFilesNotFolders++做递增

步骤 3. 然后应将 numberOfFilesNotFolders 的值更改为 1,然后应设置该值。

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

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

问候 工具

因为它是 post 增量?基本上你的陈述被评估为。

numberOfFilesNotFolders = numberOfFilesNotFolders

这是实际发生的步骤。

  1. file.isDirectory() 我们评价为真
  2. numberOfFilesNotFolders++ return临时变量0,numberOfFilesNotFolders加1。
  3. 您将 numberOfFilesNotFolders++ 操作的临时值分配给 numberOfFilesNotFolders 并且 numberOfFilesNotFolders 再次等于 0

如果您将语句更改为带有预增量的 ++numberOfFilesNotFolders,您将获得预期的结果。

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