有 Java 编程相关的问题?

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

C和Java中预增量和后增量运算符的行为

我在Visual C++和java中运行以下程序:

Visual C++

void main()
{
    int i = 1, j;
    j = i++ + i++ + ++i;
    printf("%d\n",j);
}

输出:

6

Java:

public class Increment {
    public static void main(String[] args) {
        int i = 1, j;
        j = i++ + i++ + ++i;
        System.out.println(j);
    }
}

输出:

7

为什么这两种语言的输出不同?两种语言是如何区别对待增量前和增量后运算符的


共 (2) 个答案

  1. # 1 楼答案

    < C++示例引起未定义的行为。在表达式中,不能多次修改值。[编辑得更精确。]

    我不确定Java是否也是如此。但是C++确实是这样。p>

    这里有一个很好的参考资料:
    Undefined behavior and sequence points

  2. # 2 楼答案

    在C/C++中,行为是未定义的,因为在此表达式中i在没有插入序列点的情况下被多次修改。阅读:What's the value of i++ + i++?

    当然,在Java中this kind of codes的行为是定义良好的。 下面是我对Java的逐步回答:

    开始时i1

    j = i++ + i++ + ++i;
    // first step, post increment
    j = i++ + i++ + ++i;
    //  ^^^
    j = 1   + i++ + ++i;
    // now, i is 2, and another post increment:
    j = i++ + i++ + ++i;
    //  ^^^^^^^^^
    j = 1   + 2   + ++i;
    // now, i is 3 and we have a pre increment:
    j = i++ + i++ + ++i;
    //  ^^^^^^^^^^^^^^^^
    j = 1   + 2   +   4;
    j = 7;