增量运算符

时间:2015-08-30 03:17:49

标签: java operators increment

我在测试中三次错过了这个问题。我似乎无法掌握如何解决这个问题。非常感谢任何帮助。

    public class Test {
         public static void main(String[] args) {
             int j = 0;
             int i = ++j + j * 5;

             System.out.println("What is i? " + i);
        }
    }

6 个答案:

答案 0 :(得分:3)

有关:

int i = ++j + j * 5;

变量j使用表达式++j按1递增,等于j + 1,将j的值更改为1.然后遵循java中的操作顺序规则,在此阶段,乘法执行(j * 5)(1 * 5),因此当前i = 5.最后,乘法j的乘积加(j + 5)(1 + 5) = 6。

您可以通过以下简单方式查看此页面:

http://introcs.cs.princeton.edu/java/11precedence/

答案 1 :(得分:1)

根据Java的运算符优先级和评估顺序,i等于6i设置为j,预先递增为1,并添加到自身的产品和5,即6。

答案 2 :(得分:0)

此处需要注意的是j++++j之间的区别。请参阅:The difference between ++Var and Var++

记住这一点,++j将返回1,并将j的值更改为1.因此下一部分j*5等于1 * 5,即5。所以整体{{1给你6。

答案 3 :(得分:0)

Java有一个operator precedence规则,这意味着Java中包含运算符,后缀(j ++)和前缀(++ j)的任何数学表达式都会被首先评估。还有left and right associativity这就是你的语句被解析的方式。数学运算符如+, - ,/,*具有从左到右的相关性。后缀和前缀具有从右到左的关联性。

查看Java Grammar File,发现

  

前缀增量表达式的值是。的值   存储新值后的变量

因此,当前语句的++ j为1。

  

后缀增量表达式的值是。的值   存储新值之前的变量。

因此,当前语句的j ++为0。

因此,前缀评估后的(++ j)+ j * 5变为(1 +(1 * 5))= 6.

<强> [编辑]

因此,诸如j ++ + j * 5之类的语句将给出5作为答案,因为j在j ++之后变为1(后缀增量)但j ++本身仍为0。

答案 4 :(得分:0)

如果++ j出现在语句中,则j的值首先递增,然后执行该语句。但是如果j ++出现在语句中,则执行第一个语句然后递增值。

要简单地解决执行部分,您可以忽略++符号并简化它。但是不要忘记增量和简化的顺序。

答案 5 :(得分:0)

根据java运算符优先级,++运算符的优先级高于+*运算符。这是一步一步发生的事情:

首先++j发生。由于j为0,++j会将j增加为1。 现在表达式++j + 5 * j已成为1 + 5 * 1

现在我们有两个运营商+*。首先应用哪一个?请参阅运算符优先级图表,您会发现*的优先级高于+。首先,5 * 1首先发生。乘法后,表达式看起来像1 + 5

1添加到5,我们得到6。所以.... i = 6就是结果。

如果您想了解更多有关++运算符的信息,那么youtube上会有一些不错的视频。