为什么输出为0?

时间:2011-11-04 16:25:46

标签: java

class T {
    public static void main(String args[]) {
        int x = 0;
        x = x++;
        System.out.println(x);
    }
}

11 个答案:

答案 0 :(得分:8)

因为++是“后增量”运算符 - 它会在增加之前返回变量的值。

步骤如下:

  • i的值(在递增之前)并记住它
  • 增量i
  • 将记住的值分配给i

答案 1 :(得分:4)

因为后增量运算符返回时间值(x的当前值),然后递增x。

试试这样:

class T {
    public static void main(String args[]) {
        int x = 0;
        x = ++x;
        System.out.println(x);
    }
}

答案 2 :(得分:3)

x = x++;

相当于

 temp = x;

 x = x + 1;

 x = temp;

这就是输出为零的原因。

此运算符称为后增量运算符。 与增量后运算符相关的其他运算符是每增量运算符。

x = ++x;

如果您应用每增量输出将为1。

答案 3 :(得分:2)

因为您使用了后缀++运算符,这意味着它在赋值后进行了评估。因此,首先评估x = x,因此x保持为0,然后评估x++,但结果不会分配给任何内容。

您可以使用前缀++运算符来获得所需的结果:x = ++x;

来自docs

  

可以在(前缀)或之前应用递增/递减运算符   after(postfix)操作数。代码结果++;和++结果;将   两个结果都以1递增。唯一的区别是   前缀版本(++结果)评估为递增的值,   而后缀版本(结果++)评估为原始版本   值。

答案 4 :(得分:1)

x++返回零,然后递增x。赋值x = x++x(在增加之后)设置为x++的返回值,即0。

答案 5 :(得分:0)

因为++ after在程序运行后添加。你可以通过以下两种方式解决它

class T {
    public static void main(String args[]) {
        int x = 0;
        x = ++x;
        System.out.println(x);
    }
}

class T {
    public static void main(String args[]) {
        int x = 0;
        x += 1;
        System.out.println(x);
    }
}

答案 6 :(得分:0)

这是因为x++实际上意味着“使用x中存储的值然后递增它”。如果要在使用前增加该值,请改为++x

答案 7 :(得分:0)

我现在不知道它会对输出产生影响,但你不需要导入,你可以改变:

x = x++;

到:

x++;

答案 8 :(得分:0)

以正常增量显示帖子增量的示例,正​​如先前的回答者所说:

class T { 
    public static void main(String args[]) { 
        for (int i = 0; i < 6; i++) {
          int x = 0; 
          x = x+1+i; 
          System.out.println(x); 
        }
    } 
} 

答案 9 :(得分:0)

this搜索的第一个结果是this链接。

  

它表现出来的原因是因为相互作用   在运算符优先级和++的奇数“返回值”之间   运营商。后缀增量首先发生(请参阅您最喜欢的副本   运算符优先级图);但是后缀,根据定义,返回   变量的先前值。所以“回报价值”不是   “原始x加一”,而只是“原始x”(x,在此   point,实际上包含递增的值)。此返回值   然后分配给x,它会覆盖++在第一个中所做的事情   地点。 IOW,在表达式x = x ++中,递增的值会丢失,   由最后发生的任务覆盖。

Google是你的朋友! :)

答案 10 :(得分:0)

解释你在做什么:

class T {
    public static void main(String args[]) {
        int x = 0; // x is zero
        x = x++;  // assign x to be x (which is 0). 
                 //  then increment a non-existant variable by 1
        System.out.println(x); //print 0
    }
}