为什么这给我0?

时间:2014-02-28 06:28:34

标签: java

在以下程序中

package test;

public class test {
    public static void main(String args[])
    {
        //System.out.println(2+3*4);
        int temp=0;
        temp+=temp++;
        System.out.println(temp);
    }

}

我不明白为什么它给我0.可以解释一下吗?

7 个答案:

答案 0 :(得分:4)

后增量++运算符在表达式后递增值。

在代码中

temp += temp++;所以表达式将被评估为

即。 temp= temp + temp++;

temp = 0 + 0 (value will not increment here as you are using post increment)

temp = 0

让我们再看一个例子

temp= temp++ + temp;所以它将被评估为

temp = 0 + 1 (value is incremented here mean after temp++ expression)

然后打印它将显示的值1

答案 1 :(得分:1)

因为如果在表达式中使用变量++,变量将在计算表达式后递增。如果你写:

++variable

变量将递增,然后计算表达式。

答案 2 :(得分:0)

您在postincrement运算符上赋值,它将在赋值后递增值。

预先增量会更好

++temp

答案 3 :(得分:0)

稍后完成

++后期增量操作,0+0 = 0首先分配给temp和

答案 4 :(得分:0)

temp+=temp++;
--> temp=temp+ temp++ ;
-> temp = 0 + 0 (and now increment temp i.e, after assigning)
-->so, temp = 0

答案 5 :(得分:0)

我花了一些时间来找到答案,在这里我得到了什么

int temp = 0;

温度+ =温度++;

即temp = temp + temp ++;

现在这里一步一步地发生了什么

1步temp = exp(0 + 0)

2步温度值将增加到1

3步temp将从表达式1

中分配值0

所以实际上在表达式中temp值会增加,但由于赋值运算符

再次重置为0

这是我的代码作为证明

int i=0,j=0;
System.out.println(i+=i++);
System.out.println(j+=j++);
System.out.println("i= "+i+", j="+j);
System.out.println(i=i+i++);
System.out.println(j=i+j++);
System.out.println("i= "+i+", j="+j);
j+=i++;
System.out.println("i= "+i+", j="+j);

输出

0
0
i= 0, j=0
0
0
i= 0, j=0
i= 1, j=0

所以你可以在最后一行看到i的值是1,它增加了,由于赋值运算符,j的值为0

并且是的,您应该使用预增量使其按预期工作,这只是为了说明这种意外行为的原因。

答案 6 :(得分:0)

非常简单

temp+=temp++   
temp=temp+temp++;

以上语句都是等价的。后缀运算符在使用一次后会增加其值。因此0和0 + 0使0。

相关问题