Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';s表示方程式的计算顺序;i+++++;我";在爪哇?_Java_Operators_Increment_Operator Precedence - Fatal编程技术网

Java 什么';s表示方程式的计算顺序;i+++++;我";在爪哇?

Java 什么';s表示方程式的计算顺序;i+++++;我";在爪哇?,java,operators,increment,operator-precedence,Java,Operators,Increment,Operator Precedence,考虑一下这个片段: int a = 1, b = 1, c = 1; System.out.println(a + ++a); System.out.println(b++ + ++b); System.out.println(c++ + c); 输出为: 3 4 3 这就是我认为正在发生的事情,但输出不匹配: 1. ++a -> +a -> 4 = 2 + 2 2. ++b -> +b -> 4 = 2 + 2 3. c -> +c -> 2 = 1 +

考虑一下这个片段:

int a = 1, b = 1, c = 1;
System.out.println(a + ++a);
System.out.println(b++ + ++b);
System.out.println(c++ + c);
输出为:

3
4
3
这就是我认为正在发生的事情,但输出不匹配:

1. ++a -> +a -> 4 = 2 + 2
2. ++b -> +b -> 4 = 2 + 2
3. c -> +c -> 2 = 1 + 1

一元post和pre增量的优先级高于加法:

  • b=1
    b
    初始化为1
  • b++
    b
    在等式中的当前值为1,然后
    b
    递增
  • ++b
    b
    由于后期增量而增加,因此为2。现在,由于预增量,它再次增加,方程中的值是3
  • 1+3
    等于4
  • 问题是,pre increment使变量递增,然后返回它,因此在
    ++1
    中,值递增,然后返回,并计算为2。使用post增量,返回变量值,然后递增。因此,
    1++
    将计算为1,然后在以后的引用中递增为2。因此:



  • 应该注意的是,优先级并不决定评估顺序。优先级仅更改表达式的括号。Java中的求值顺序始终是从左到右,因为与C/C++不同,请参见。

    一元后增量和前增量的优先级高于加法:

  • b=1
    b
    初始化为1
  • b++
    b
    在等式中的当前值为1,然后
    b
    递增
  • ++b
    b
    由于后期增量而增加,因此为2。现在,由于预增量,它再次增加,方程中的值是3
  • 1+3
    等于4
  • 问题是,pre increment使变量递增,然后返回它,因此在
    ++1
    中,值递增,然后返回,并计算为2。使用post增量,返回变量值,然后递增。因此,
    1++
    将计算为1,然后在以后的引用中递增为2。因此:



  • 应该注意的是,优先级并不决定评估顺序。优先级仅更改表达式的括号。Java中的求值顺序总是从左到右,因为与C/C++不同,请参见。

    正如我们所知,
    x++
    ++x
    以稍微不同的方式做相同的事情
    x++
    返回该值,然后递增
    ++x
    递增该值,然后返回该值

    逻辑不错,但你忘了一些东西

    在第一个示例中,取
    a
    ,即1,并将其添加到
    ++a
    。前面的++使它从1增加到2,现在方程是
    1+2
    。那是三

    你可以选择
    b++
    b
    之前是1,因为你把++放在后面,它给方程的其余部分提供了初始值1,然后将变量增加到2。但是你忘了,即使我们从
    b++
    得到的值是1,在内存中,
    b
    现在是2。由于b是2,下一部分,
    ++b
    返回3

    同样的错误也发生在第三部分
    c
    返回1,然后递增为2。然后,将1添加到
    c
    ,自从您将其递增后,现在是2,得到3

    下面是发生的事情:

    答:
    1+2=3

    b:
    1+3=4


    c:
    1+2=3

    正如我们所知,
    x++
    ++x
    以稍微不同的方式做同样的事情
    x++
    返回该值,然后递增
    ++x
    递增该值,然后返回该值

    逻辑不错,但你忘了一些东西

    在第一个示例中,取
    a
    ,即1,并将其添加到
    ++a
    。前面的++使它从1增加到2,现在方程是
    1+2
    。那是三

    你可以选择
    b++
    b
    之前是1,因为你把++放在后面,它给方程的其余部分提供了初始值1,然后将变量增加到2。但是你忘了,即使我们从
    b++
    得到的值是1,在内存中,
    b
    现在是2。由于b是2,下一部分,
    ++b
    返回3

    同样的错误也发生在第三部分
    c
    返回1,然后递增为2。然后,将1添加到
    c
    ,自从您将其递增后,现在是2,得到3

    下面是发生的事情:

    答:
    1+2=3

    b:
    1+3=4


    c:
    1+2=3
    a++
    计算为a,然后递增a<代码>++a首先递增a,然后返回a

    从处的运算符优先级图表中,可以看到加法从左到右进行

    浏览每个示例,其中每个变量从1开始:

    a+++a
    a
    被添加到
    a
    中,增量为1。这给了我们1+2(3)

    b+++++b
    b
    递增之前,在它被
    b++
    递增之后,以及在它被
    +++b
    递增之后,被添加到
    b
    。这给了我们1+3(4)


    c+++c
    c
    在递增之前,在递增之后添加到
    c
    ,得到1+2(3)。

    a++
    计算为a,然后递增a<代码>++a首先递增a,然后返回a

    从处的运算符优先级图表中,可以看到加法从左到右进行

    浏览每个示例,其中每个变量从1开始:

    a+++a
    a
    被添加到
    a
    中,增量为1。这给了我们1+2(3)

    b+++++++b
    b
    在它被
    b++
    递增之后,在它被inc之后,被添加到
    b
    b++ + ++b ^^^ post-increment, evaluates to 1 1 + ++b ^^^ pre-increment, due to post-increment is 2, then pre-increments and evaluates to 3 1 + 3 ^^^^^ evaluates to 4 a + ++a ^ nothing, evaluates to 1 1 + ++a ^^^ pre-increment, evaluates to 2 1 + 2 ^^^^^ evaluates to 3 c++ + c ^^^ post-increment, evaluates to 1 1 + c ^ nothing, due to post-increment is 2 and evaluates to 2 1 + 2 ^^^^^ evaluates to 3
    3
    4
    3