【问题标题】:Why is the output "false10" and not "false11"? [duplicate]为什么输出是“false10”而不是“false11”? [复制]
【发布时间】:2019-10-16 23:07:42
【问题描述】:

有人能告诉我为什么 a 的值在下面的代码中没有改变吗?

int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);

【问题讨论】:

    标签: java


    【解决方案1】:

    您正在看到“短路评估”。布尔表达式(++a==11) 的第二部分永远不会被计算,因为(a &lt; 5) 是假的。在这种情况下,JVM 在计算 (++a==11) 之前就知道整个表达式为假,因此它完全跳过它。

    这也是为什么这种“副作用”在逻辑测试中不好的一个很好的例子:你正在以一种不可预测的方式改变你正在评估的值。在一个非平凡的程序中,你不一定知道(a &lt; 5)是否为真,所以很难知道a是否会递增。

    【讨论】:

    • 请投票关闭重复的问题,而不是浪费时间回答问题。 :)
    • 具有讽刺意味的是,对于这个重复的问题的最受欢迎的答案有一条评论,抱怨那个是重复的......重复回复:“我没有时间搜索重复其他人提出的问题,所以我只在我知道一个重复的特定问题时才关闭。否则,回答通常需要更少的时间。 :) 我们当然都可以帮助保持网站的清洁和没有重复,我们也可以回答这个问题。
    • 副本回答了问题。你可以花时间回答一个已经回答的问题……或者你可以帮助没有答案的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多