Java 为什么这给了我0?

Java 为什么这给了我0?,java,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。请任何人解释一下好吗?你在后增量运算符上赋值

在下面的程序中

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。请任何人解释一下好吗?

你在后增量运算符上赋值,它会在赋值后增加数值

预增量会更好

++temp

当您在postincrement操作符上指定值时,它将在指定温度后增加该值

预增量会更好

++temp

++
后期增量操作完成后,
0+0=0
首先分配给temp,
++
后期增量操作完成后,
0+0=0
首先分配给temp和,因为如果在表达式中使用变量+,则变量将在计算表达式后递增。如果你写:

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

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

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

++variable

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

Post increment++运算符递增表达式后的值

在代码中

temp+=temp++因此表达式的计算结果为

temp = 0 + 1 (value is incremented here mean after temp++ expression)
i、 e.
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

Post increment++运算符在表达式后增加值

在代码中

temp+=temp++因此表达式的计算结果为

temp = 0 + 1 (value is incremented here mean after temp++ expression)
i、 e.
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

我花了一些时间找到答案,这里是我得到的

内部温度=0

温度+=温度++

ie温度=温度+温度++

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

1步温度=经验值(0+0)

2步骤温度值将增加到1

3步骤温度将被分配表达式1中的值0

因此,实际上在表达式中,临时值是递增的,但由于赋值运算符的原因,再次重置为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,因为赋值运算符


是的,您应该使用pre-increment使其如您所期望的那样工作。这只是为了说明为什么会出现这种意外行为。

我花了一些时间来找到答案,这里是我得到的

内部温度=0

温度+=温度++

ie温度=温度+温度++

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

1步温度=经验值(0+0)

2步骤温度值将增加到1

3步骤温度将被分配表达式1中的值0

因此,实际上在表达式中,临时值是递增的,但由于赋值运算符的原因,再次重置为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,因为赋值运算符

是的,您应该使用pre-increment使其按预期工作,这只是为了说明为什么会出现这种意外行为。

非常简单

temp+=temp++   
temp=temp+temp++;
上述两种说法都是等价的。因为后缀运算符一旦使用就会增加它的值。所以它的0和0+0等于0。

非常简单

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


上面的两个语句都是等价的。因为后缀操作符在使用后会增加它的值。所以它的0和0+0等于0。

什么是
++
做的,什么是
+=
做的?@SotiriosDelimanolis两者不一样,I++不等于I=I+1;它们绝对不一样。你需要再检查一次。你标记重复多于回答
++
做什么和
+=
做什么?@SotiriosDelimanolis并不都一样,I++不等于I=I+1;它们绝对不一样。你需要再检查一遍。你的回答比什么好?在做什么?没有得到0?比什么好?在做什么?在未获得0时?在将temp和temp++(不增加)的值分配给temp后,在何处执行增量。temp++已执行,但未分配给原始temp。为什么不分配给原始temp?堆栈上的变量将不同。所以不能直接分配回。在将temp和temp++(不增加)的值分配给temp之后,在哪里执行增量。temp++已执行,但未分配给原始temp。为什么不分配给原始temp?堆栈上的变量将不同。所以不能直接分配回来。对不起,我不懂,你能不能说清楚一点?对不起,我不懂,你能不能说清楚一点?不是temp+=temp++;与temp=temp+temp++类似,因此temp++将为1,现在temp=temp+1即temp=0+1;因此,temp将是1表达式后面的值的无代价后增量。做一件事替换temp++->++temp你会发现注释“值不会在使用post时增加”的答案-1,用于解释检查我的答案。@RaviKumar该解释是针对temp++的,意思是该值不会增加,它将在表达式后增加。同时更新了答案,我认为这将有助于uIsnt temp++=temp++;与temp=temp+temp++类似,因此temp++将为1,现在temp=temp+1即temp=0+1;因此,temp将是1表达式后面的值的无代价后增量。做一件事替换temp++->++temp,你会发现注释“值在使用post时不会增加”的答案-1,用于解释检查我的答案。@RaviKumar该解释用于temp++意味着该值不会增加,它将在表达式后增加。此外,更新的答案我认为它将帮助你