奇怪的Java语法
当我遇到这个问题时,我正在做一个练习计算机科学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 = b + 1
c–:使用 c后c = c – 1
–a:使用之前a = a – 1
看看它像这样:
(b++) + (-(c--)) + (--a)
这应该更有意义!
查看Operator Precedence以了解它为何如此工作。
看看像这样的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,这意味着立即减少。
所以print语句中的变量值将是:
c = 7 + -10 + 4 = 1 a = 4 b = 8
我可以补充一点,在我看来这对于测试来说是一个糟糕的问题。 所有它真正的问题是你是否理解i++
vs ++i
。