我正在运行以下代码
int x=4;
int y=3;
double z=1.5;
z=++x/y*(x-- +2);
int t=(++x/y);
System.out.println(z); //7
想知道
时它是如何产生7的++ X / Y = 1.6666
3 = 6 * 1.6666 = 10
答案 0 :(得分:5)
z=++x/y*(x-- +2);
评估为:
z = ++x / y * (x-- + 2); // Substitute value of ++x, y and x--
= 5 / 3 * (5 + 2); // After this point, x will be 4. Evaluate parenthesized expr
= 5 / 3 * 7 // Now, left-to-right evaluation follows
= 1 * 7 // 5 / 3 due to integer division will give you 1, and not 1.66
和
t = ++x / y; // x is 4 here
= 5 / 3
= 1
答案 1 :(得分:1)
代码评估为:
z=((++x)/y)*(x-- +2);
x和y都是int,因此每个步骤的计算结果将被转换为int类型。这意味着5/3=1
。
最后,结果会分配给一个双变量,因此7
会转换为7.0
。
将代码修改为:
z=1.0 * ((++x)/y)*(x-- +2);
您将获得小数结果。