【发布时间】:2016-09-18 10:34:09
【问题描述】:
在三元运算符中调用的方法会增加一个变量并返回一个布尔值。当函数返回 false 时,该值将被还原。我希望变量为 1,但得到的却是 0。为什么?
public class Main {
public int a=0;//variable whose value is to be increased in function
boolean function(){
a++;
return false;
}
public static void main(String argv[]){
Main m=new Main();
m.a+=(m.function()?1:0);
System.out.println(m.a);//expected output to be 1 but got a 0 !!!!!
}
}
【问题讨论】:
-
这不应该是未定义的行为吗?
-
未定义行为是一个 C/C++ 概念。
-
@holidayCoder 号
-
@LukePark 您最初的陈述仍然不正确,这就是我要指出的。函数的返回值和三元运算符单独与
m.a的结束值无关。事实上,+=运算符以某种方式替换了a的后增量状态。 -
@PatrickRoberts 我最初的陈述没有错。我认为你误解了命令。替换值,几乎是在说
m.a = 0 (the current value) + (potentially 1 or 0)。
标签: java variable-assignment increment ternary