繁体   English   中英

奇怪的Java语法

[英]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

看看它是这样的:

(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM