棘手的基本java操作

棘手的基本java操作,java,math,operation,Java,Math,Operation,我在Java中得到了这两个不同的代码,我无法理解它们是如何产生这些特定输出的 他们似乎在两种不同的逻辑下工作,我无法理解 inta=5; int b=4; a-=(b++)+++a;//有关更混乱的结果,请将-=替换为+=并查看逻辑如何更改。 系统输出打印ln(a);//输出:-5 及 intc=8; c++=++c; System.out.println(++c);//产出:18 每种情况是如何工作的,以及它们是如何产生这些特定的输出的?这里的主要区别是后和前增量是什么。这些参数确定值是在

我在Java中得到了这两个不同的代码,我无法理解它们是如何产生这些特定输出的

他们似乎在两种不同的逻辑下工作,我无法理解

inta=5;
int b=4;
a-=(b++)+++a;//有关更混乱的结果,请将-=替换为+=并查看逻辑如何更改。
系统输出打印ln(a);//输出:-5

intc=8;
c++=++c;
System.out.println(++c);//产出:18

每种情况是如何工作的,以及它们是如何产生这些特定的输出的?

这里的主要区别是
增量是什么。这些参数确定值是在评估之前增加,还是在评估之后增加

以下是第一个案例的数学分解:

a=5-(4+6)
,这将减少到
-5

请注意,
a
在完成数学运算之前是从
++a
增加而来的,即
preincrement
,但是
b
计算为
4
。另一件需要注意的事情是,从
-=
使用的
a
使用原始
a
值,无论是增量后还是增量前

第二个方程式从数学上简化为:

c=8+9
这将减少到
17

输出打印
18
,因为您的
System.out.print(++c)
会在输出之前再增加一次,因为它是预增量。注意:如果使用
print
语句
c++
,则值将打印到
17

可以找到运算符优先级的图表。请注意,赋值的优先级低于一元运算符/后缀运算符。

它相当于:

int a = 5;
int b = 4;
a -= (b++) + ++a; // => 5 -= (4) + 6
int c = 8;
c += ++c; // => 9 += 9
主要区别是:

++a和++c递增该值并立即返回


b++返回值,然后将其递增。

在++的顺序上存在差异。当两者都增加变量时,++a会将原始值传递给中间的操作链;而a++将传递新值。因此,对于您的第一个示例:

++a --> a is now 6; but the equation is using 5:
a -= (b++) + 5;
b++ --> b is now 5;
a -= 5 + 5;
a -= 10;
? = 5 - 10;


a = a - 5 + 5;
a = 5 - 5 + 5;
a = -10;
(您应该有足够的资源来跟踪第二个示例)

要查看操作列表,请尝试。还有一些增量示例。

这都是关于Java中的增量的。检查该表,找出哪个操作首先发生,哪个操作最后发生。

最简单的例子是`

int x=3,y=3;
x += ++x;
y+= y++;
x是7,y是6。仅凭优先权不足以解释这种行为。使用优先级,第二行将是
x+=(++x)
,即递增x并返回其值(x现在是4);接下来我们有
x+=4
,它将返回8

相反,最好将
x+=w
视为
x=x+w
的缩写,这种重写发生在求值之前。在我们的例子中,重写被解释为
x=(x+++x))
。如此解释为

x = ( 3 + (++x))
x = ( 3 +  4 )       x is 4
x = 7                x is 7

simlar系统适用于y方程,最后给出y=6

您应该检查后增量和预增量之间的差异,而不是重复,这取决于
a-=x
++a
的交互方式。关键的一点似乎是重写
a-=x
,因为
a=a-x
发生在预增量操作符之前。我不确定要问这个简单的问题,但我真的很难回答,我不知道在谷歌上搜索什么,因为我已经知道如何增量、减量,所以我决定在这里问我最后的解决方案是什么。在我提问之前,当我还在玩我发布的这些操作时,在我的脑海中,出于某种原因,我确信我尝试了b++和(b++),并意识到(b++)的行为类似于+++b,然而,我肯定错了。但感谢大家的快速回复,尤其是Nexevis。