[英]Weird 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行是如何工作的吗?
谢谢
我添加了一些括号:
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
看看像这样的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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.