奇怪的Java语法

时间:2013-08-04 05:12:31

标签: java syntax

当我遇到这个问题时,我正在练习计算机科学UIL测试表:

以下是什么输出?

int a = 5;
int b = 7;
int c = 10;
c = b+++-c--+--a;
System.out.println(a + " " + b + " " + c);

我记下了答案“由于语法错误而没有输出”,但我弄错了。真正的答案是4 8 1! (我自己测试过)

有人可以向我解释第4行是如何运作的吗? 感谢

5 个答案:

答案 0 :(得分:14)

我添加了一些括号:

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 = a - 1

答案 1 :(得分:6)

这样看:

(b++) + (-(c--)) + (--a)

这应该更有意义!

看看Operator Precedence,了解它为什么会这样运作。

答案 2 :(得分:3)

查看c的初始化,c = (b++) + (-(c--)) + (--a);

他们压缩并故意混淆你的学习目的。代码基本上是这样说的,c = (b + 1) + (-(c - 1)) + (a - 1);

答案 3 :(得分:2)

稍微分解一下这句话。这是故意混淆的。

c = b++ + -c-- + --a;

这意味着什么:

  • 变量c被赋予结果......
    • b(增量将在此行之后生效),加上
    • -的一元操作c(减少将在此行之后生效),再加上
    • a(减量立即生效)。

用值替换变量,得到:

c = 7 + (-10) + 4
c = 1

...并且你的打印声明的结果应该是:

4 8 0

答案 4 :(得分:2)

让我们慢下来,仔细看看这个等式。仔细想想。

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