棘手的基本java操作
我在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 每种情况是如何工作的,以及它们是如何产生这些特定的输出的?这里的主要区别是后和前增量是什么。这些参数确定值是在
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。