当我遇到这个问题时,我正在练习计算机科学 UIL 测试表:
下面的输出是什么?
int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
System.out.println(a + " " + b + " " + c);
我记下了“由于语法错误而没有输出”的答案,但我弄错了。真正的答案是 4 8 1!(我自己测试过)
有人可以向我解释第 4 行是如何工作的吗?
谢谢
我添加了一些括号:
int a = 5;
int b = 7;
int c = 10;
c = (b++) + (-(c--)) + (--a);
System.out.println(a + " " + b + " " + c);
b++ : b = b + 1 在使用 b 之后
c-- : c = c - 1 在使用 c 之后
--a : a = a - 1 在使用 a 之前
看看c
这样的初始化,c = (b++) + (-(c--)) + (--a);
为了您的学习目的,他们将其压缩并故意混淆。代码本质上是这样说的,c = (b + 1) + (-(c - 1)) + (a - 1);
稍微分解一下声明。这是故意混淆的。
c = b++ + -c-- + --a;
这意味着什么:
c
被分配了...的结果
b
(递增将在此行之后生效),加上-
,加上c
a
(减量立即生效)。用值替换变量,你得到:
c = 7 + (-10) + 4
c = 1
...您的打印语句的结果应该是:
4 8 0
让我们放慢速度,仔细看看方程。仔细考虑一下。
int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
b++ 表示赋值后递增 b,因此 b 在方程中保持等于其原始值,但在方程后将递增。
然后是+。
然后一个否定c--
。c
递减,但方程将保持不变。
然后将其添加到 --a,这意味着 a 立即递减。
因此 print 语句中的变量值将是:
c = 7 + -10 + 4 = 1
a = 4
b = 8
我可以补充一点,在我看来,这是一个糟糕的测试问题。它真正要问的是你是否理解i++
vs ++i
。