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++意味着该值不会增加,它将在表达式后增加。此外,更新的答案我认为它将帮助你