java中的递增和递减运算符

Posted

技术标签:

【中文标题】java中的递增和递减运算符【英文标题】:Increment and Decrement operators in java 【发布时间】:2014-03-21 06:35:18 【问题描述】:

我对增量和减量运算符有疑问。我不明白为什么 java 会给出这些输出。

    x = 5;  y = 10;
    System.out.println(z = y *= x++); // output is 50
    x = 2; y = 3; z = 4;
    System.out.println("Result = "+ z + y++ * x); // output is Result = 46
    x = 5;
    System.out.println( x++*x); // output is 30
    x = 5;
    System.out.println( x*x++); // output is 25

例如,在第二个 println 函数中,y 乘以不增加 1,而在第三个函数中,x 与 x+1 相乘。据我所知,一元递增和一元递减运算符的优先级高于算术运算符,所以为什么第二个计算不增加 1( y++ * x = 3*2 = 6 ,为什么不 (y+1) * x = 8 ?

【问题讨论】:

您将运算符优先级与求值顺序混淆了。 如果只考虑优先级,那么为什么还要麻烦y++++y? :) 对于第 2 行,如果您在之后的行中使用变量 y,则 y 将得到值 '4'。这与 * 优先于 + 的运算符的算术排序无关。 preincrement 运算符立即使用递增的值,而 postincrement 运算符在执行操作后递增值。 【参考方案1】:

postfix-++ 表示,变量以其当前值求值,在对周围的表达式求值后,变量递增。

【讨论】:

【参考方案2】:

y++ 将在代码后的 y 上加 1。 ++y 将在代码前的 y 上加 1。

【讨论】:

【参考方案3】:

需要理解的东西:

后自增运算符(变量名后的++)返回变量的值,然后递增变量。因此,如果x5,那么表达式x++ 的计算结果为5,并且具有将x 设置为6 的副作用。

这个有点特别:

x = 2; y = 3; z = 4;
System.out.println("Result = "+ z + y++ * x); // output is Result = 46

注意这里使用了字符串连接。它打印Result =,然后是4,它是z 的值,然后是y++ * x 的值,它是646 不是一个数字,它是来自两个表达式的46

【讨论】:

感谢您的评论。我基本明白了。【参考方案4】:

它们的优先级高于二元运算符,但它们的计算结果为“x”。后递增的副作用不是优先级的一部分。

【讨论】:

【参考方案5】:
 x = 5;  y = 10;
    System.out.println(z = y *= x++); // output is 50 -->z=y=y*x i.e, z=y=10*5 (now, after evaluation of the expression, x is incremented to 6)
    x = 2; y = 3; z = 4;
    System.out.println("Result = "+ z + y++ * x); // output is Result = 46 --> from Right to left . y++ * x happens first..So, 3 * 2 = 6 (now, y will be incremented to 4) then "Result = " +z (String) + number (y++ * z) will be concatenated as Strings.
    x = 5;
    System.out.println( x++*x); // output is 30 --> 5 * (5+1 i.e, x is already incremented to 6 when you do x++ so its like 5 *6 )
    x = 5;
    System.out.println( x*x++); // output is 25 -- > 5 * 5 (x will be incremented now)

【讨论】:

【参考方案6】:

因为y++ y 将首先被评估,然后递增。

相反,++y 的增量发生在评估之前。

【讨论】:

【参考方案7】:

您的第一个表达式z = y *= x++ 等于:

z=y=y*x;
x++;

您的第二个表达式+ z + y++ * x 等价于:

z + ""+ (y*x) // here z = 4 and y*x is 6 which gives us 46.

同样你可以找出第三个和第四个表达式。

【讨论】:

【参考方案8】:

我建议阅读本教程,我想会对用法有所启发 -> Java operators.

让我们把它分解:

x = 5;  y = 10;
System.out.println(z = y *= x++);

在上面的代码中,您对 y * = x++; 的结果赋值给 z这意味着 y = y * x++。现在,x++ 将在乘法完成后进行评估。如果您希望它发生在以前,您应该使用 ++x。

x = 2; y = 3; z = 4;
System.out.println("Result = "+ z + y++ * x); // output is Result = 46

在这种情况下,您将字符串与上述值连接起来;首先是乘法,然后是加法,最后才计算后增量。

其余示例与上述示例类似。运算符优先级是上面应用的规则,您可以使用此表查看它们的评估顺序:Operator Precedence

【讨论】:

以上是关于java中的递增和递减运算符的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的递增/递减运算符

Javascript中的递增/递减运算符是不是被认为是错误的形式? [复制]

递增递减运算符

递增和递减运算符

JavaScript递增和递减运算符

为啥递增和递减是一元运算