post increment operator java

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

这里的温度在哪里?任何解释都将非常感激。“我对此深有所怀疑。;)>>提前致谢。


茅侃侃
浏览 502回答 3
3回答

九州编程

让我们分解你自己的论点:据作者说,j=j++;类似于temp=j;j=j+1;&nbsp; &nbsp; // incrementj=temp;&nbsp; &nbsp;// then assign是的,到目前为止你是对的...,但这里是你弄错了:但a=b++;使b=1。所以它应该像这样评估,a=b;&nbsp; &nbsp; &nbsp; // assignb=b+1;&nbsp; &nbsp; // then increment错误!你没有一贯地应用这条规则!你已经从增量改变了顺序,然后分配给分配再增加 !!! 它实际上是这样评估的:temp=b;b=b+1;&nbsp; &nbsp; &nbsp;// incrementa=temp;&nbsp; &nbsp; // then assign基本上这种形式的作业:lhs = rhs++;做类似于这样的事情:temp = rhs;rhs = rhs+1;&nbsp; // incrementlhs = temp;&nbsp; &nbsp;// then assign将此应用于a = b++;。然后也应用它j = j++;。这就是为什么你得到你得到的结果。你所做的是你想出了自己的解释是什么a = b++;呢-不遵循上述规则理解错了。这是你困惑的根源。也可以看看JLS 15.14.2后缀增量运算符“...将值1添加到变量的值中,并将总和存储回变量[...]后缀增量表达式的值是存储新值之前变量的值。”

FFIVE

j++将使用旧值,j然后它将增加它。但是当它覆盖左侧时,它将使用旧的j值。它类似于:temp=j;j&nbsp;+=&nbsp;1;&nbsp;j=temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;take&nbsp;the&nbsp;old&nbsp;value&nbsp;of&nbsp;j.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java