为了账号安全,请及时绑定邮箱和手机立即绑定

post increment operator java

post increment operator java

茅侃侃 2019-08-05 15:41:30
post increment operator java我无法通过joshua bloch的“java puzzlers”来制作以下代码的正面或反面。public class Test22{  public static void main(String args[]){   int j=0;   for(int i=0;i<100;i++){      j=j++;   }   System.out.println(j); //prints 0   int a=0,b=0;   a=b++;   System.out.println(a);   System.out.println(b); //prints 1  }}我不能得到j打印0的部分。据作者说,j=j++类似于temp=j;j=j+1;j=temp;但a=b++制作b 1.所以它应该像这样评估,a=b b=b+1遵循相同的逻辑,不应该j=j++被评估为,j=j j=j+1这里的温度在哪里?任何解释都将非常感激。“我对此深有所怀疑。;)>>提前致谢。
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞


让我们分解你自己的论点:


据作者说,


j=j++;

类似于


temp=j;

j=j+1;    // increment

j=temp;   // then assign

是的,到目前为止你是对的...,但这里是你弄错了:



a=b++;

使b=1。所以它应该像这样评估,


a=b;      // assign

b=b+1;    // then increment

错误!你没有一贯地应用这条规则!你已经从增量改变了顺序,然后分配给分配再增加 !!! 它实际上是这样评估的:


temp=b;

b=b+1;     // increment

a=temp;    // then assign

基本上这种形式的作业:


lhs = rhs++;

做类似于这样的事情:


temp = rhs;

rhs = rhs+1;  // increment

lhs = temp;   // then assign

将此应用于a = b++;。然后也应用它j = j++;。这就是为什么你得到你得到的结果。


你所做的是你想出了自己的解释是什么a = b++;呢-不遵循上述规则理解错了。这是你困惑的根源。


也可以看看

JLS 15.14.2后缀增量运算符

“...将值1添加到变量的值中,并将总和存储回变量[...]后缀增量表达式的值是存储新值之前变量的值。”


查看完整回答
反对 回复 2019-08-05
?
FFIVE

TA贡献1797条经验 获得超6个赞

j++将使用旧值,j然后它将增加它。但是当它覆盖左侧时,它将使用旧的j值。

它类似于:

temp=j;j += 1; j=temp;     // take the old value of j.


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信