int a = 5;
if(a==a++){
printf("true 1");
}
if(a==++a){
printf("true 2");
}
当我运行此代码时,它会打印" true 2"。我不明白怎么做。请帮忙。 另外,逻辑等价如何优先于增量运算符计算?
答案 0 :(得分:2)
JSONArray modules = response.getJSONArray("modules");
JSONObject object = modules.getJSONObject(1);
JSONArray books = object.getJSONArray("book");
中的评估顺序未由标准定义。因此,a==++a
可以在比较之前或比较之后执行。使用另一个编译器可以获得不同的结果。这被称为“UB'”或“未定义的行为”。
答案 1 :(得分:0)
此代码将以多种方式提供未定义的行为。但是,如果您初始化a
,则不同之处在于++a
将返回递增的值,而a++
将返回新值。
此外,在for
循环中,您应该使用++a
并且不会出错。
让我们评估您的问题。
在第一种情况下,当您将a
与递增值a
进行比较时(因为a++
返回递增的值),所以它为false。示例:a
有5,增量值为6.因此,由于它们不匹配,因此将为false。
在第二种情况下,当您将a
与a
的旧值进行比较时(因为++a
返回原始值),您就会得到真实。示例:a
有5,当您使用++a
递增它时,您将获得旧/原始值,也是5.因此,您得到一个真值。