有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java请评估以下语句(与增量后和增量前相关)

当我执行代码时,它给我13作为答案。请解释计算机是如何得出答案的。我想知道增量前后的优先级

class demo
{
public static void main(String [] arg)
     {
      int i=2;
      System.out.println(i++ + i + ++i + i++);
     }
}

共 (3) 个答案

  1. # 1 楼答案

    public static void main(final String[] args) {
        int i = 2;
        // System.out.println(i++ + i + ++i + i++);
        int temp;
    
        temp = i++;
        System.out.println(temp); // 2 since [temp = 2] [i = 3]
        temp = i;
        System.out.println(temp); // 3 since [temp = 3] [i = 3]
        temp = ++i;
        System.out.println(temp); // 4 since [temp = 4] [i = 4]
        temp = i++;
        System.out.println(temp); // 4 since [temp = 4] [i = 5]
    }
    
  2. # 2 楼答案

    我认为运算符优先级在这里不是一个真正的问题;似乎有明确的行动顺序。从左向右移动:

    (i++) + i + (++i) + (i++)
    
      2   + 3 +   4   +   4   = 13
    

    ++i意味着在读取其值之前,我会先递增
    i++表示应该先读取i,然后再递增

    注意:增量运算符比加法运算符的进阶更高。(根据评论)这里有一个很好的reference

  3. # 3 楼答案

    i++表示i在“使用”之后递增,而++i表示i在“使用”之前递增 因此你的表达是:
    2(按原样取i,然后递增)
    +3(取递增的i,一点也不更改)
    +4(服用前增加i)
    +4(按原样取i,然后递增)
    =13(我现在5岁了)