[英]Pre/post increment/decrement and operator order confusion
我正在做一些练习,但我对这个感到困惑:
public static int f (int x, int y) {
int b=y--;
while (b>0) {
if (x%2!=0) {
--x;
y=y-2;
}
else {
x=x/2;
b=b-x-1;
}
}
return x+y;
}
b=y--
的目的是什么? 因此,例如,当我们第一次进入 while 循环( while (b>0)
)时, x=5
和y=5
b
= 4 还是 5? 当我在我的计算机上运行代码时, b
是 5。返回值是 3。我真的不清楚。 对不起,如果我的问题不清楚。
int b=y--;
首先分配b=y
然后递减y
( y--
)。
另请查看前缀/后缀一元增量运算符。
这个例子(取自链接页面)演示了它:
class PrePostDemo {
public static void main(String[] args){
int i = 3;
i++;
// prints 4
System.out.println(i);
++i;
// prints 5
System.out.println(i);
// prints 6
System.out.println(++i);
// prints 6
System.out.println(i++);
// prints 7
System.out.println(i);
}
}
后递增/递减和预增量/减量之间的差异是在 表达的评价。
pre-increment 和 pre-decrement 运算符将它们的操作数增加(或减少)1,表达式的值是结果增加(或减少)的值。 相比之下,后递增和后递减运算符将其操作数的值增加(或减少)1,但表达式的值是操作数在递增(或递减)操作之前的原始值。
换句话说:
int a = 5;
int b;
b = --a; // the value of the expression --a is a-1. b is now 4, as is a.
b = a--; // the value of the expression a-- is a. b is still 4, but a is 3.
请记住,程序必须对表达式求值才能完成所有操作。 一切都是一个表达式,即使只是随便提到一个变量。 以下都是表达式:
a
a-1
--a && ++a
System.out.println(a)
当然,在表达式的计算中, 运算符优先级决定了表达式的值,就像你在小学学到的PEMDAS 一样。 一些操作符,比如增量/减量,有副作用,这当然很好玩,也是创建函数式编程的原因之一。
我相信 b 等于 5 进入循环,因为
b=y--;
当“--”在变量后面时,它会在操作后递减它。
这是糟糕的编码,因为它会使新程序员感到困惑。
该函数假设它是按值传递,就像上面的例子(而不是按引用传递)获取y
的副本,将其递减,并将其分配给b
。 它不会改变在调用函数时传递给函数的参数。
岗位增量
x++;
x += 1;
递减
x--;
x -=1;
预增量: ++x;
预减:-- --x;
根据 Head First Java 的说法:
x++
和++x
之间的区别:
int x = 0; int z = ++x;
Produces: x is 1, x is 1
in x = 0; int z = x++;
Produces: x is 1, z is 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.