黑马程序员技术交流社区

标题: 关于后++中的赋值。 [打印本页]

作者: 黑马-张洋    时间: 2013-2-26 16:07
标题: 关于后++中的赋值。

  1.         public static void main(String argv[]) {
  2.                 int i1 = 0;
  3.                 i1 = i1++;//后++的意思就是先把i1赋值给了前面一个i1,然后i1再自己增加1。那i1最终还是变成了2啊。
  4.                 System.out.println("i1:"+i1);//这一句的i1凭什么就取的是自增前?
  5.                
  6.                 int i2=0;
  7.                 int i3;
  8.                 i3=i2++;//如果这样写,那当然我想的明白了,因为i2先把值赋给了i3撒。i2自增
  9.                 System.out.println("i2:"+i2);
  10.                 System.out.println("i3:"+i3);
  11.         }
  12. }
复制代码
如贴的源码:这一句的i1凭什么就取的是自增前?
作者: Benwolf0818    时间: 2013-2-26 16:18
i1自增后还没有赋值给i1对象 ,你问题的关键在于i1++后没有再赋值
作者: 贾文泽    时间: 2013-2-26 16:26
这种情况你只需要分清楚 x++; 或者 ++x;  中 x 的值  和 x++; 这个表达式的值就可以了,
不管是前++还是后++。x的值都是加1之后的值,只是 x++; 这个表达式的值是x。 ++x;这个表达式的值是 x+1  

自增: 不管是前++还是后++,对于x的值都是一样的(x+1),只是整个自增表达式的值不同
y=x++;    //相当于  先y=x,    再x=x+1;
y=++x;    //相当于  先x=x+1,  再y=x;
自减: 跟自增一样,对于x的值都是(x-1),整体表达式的值不一样
y=x--;   //相当于  先y=x,    再x=x-1;
y=--x;    //相当于  先x=x-1,    再y=x;
作者: lzw123451    时间: 2013-2-26 16:28
本帖最后由 李志卫 于 2013-2-26 16:38 编辑
  1. public static void main(String argv[]) {

  2.                 int i1 = 0;

  3.                 i1 = i1++;//第一步 这里 把(i1++)看做一个整体,整体值为自增前i1的值0,括号里i1的值是1.
  4.                                            //第二步,然后你把整体值0又赋给i1,所以这里i1又变成0.

  5.                 System.out.println("i1:"+i1);//这里就是第二步的i1

  6.                

  7.                 int i2=0;

  8.                 int i3;

  9.                 i3=i2++;

  10.                 System.out.println("i2:"+i2);

  11.                 System.out.println("i3:"+i3);

  12.         }

  13. 当把(x++)看做一个整体时 这个整体的值是自增前X的值。 (这个很好记,x在前面就等于加前得x值)
  14. 当把(++x)看做一个整体时 这个整体的值是自增后X的值。(x在加号后面就,整体值就是自增后的x的值)
  15. 例如 int x=0;
  16. x++ = 0;
  17. ++x = 1;


复制代码

作者: 黑马-张洋    时间: 2013-2-26 16:33
贾文泽 发表于 2013-2-26 16:26
这种情况你只需要分清楚 x++; 或者 ++x;  中 x 的值  和  x++; 这个表达式的值就可以了,
不管是前++还是后 ...

先说
打印结果
i1:0
i2:1
i3:0
但是打印结果的i1为0啊。
当我把鼠标放在打印处的i1.
我们都可以看到有3个i1出现了提示的颜色
说明这4个i1是同一个啊

那为什么打印的i1是0而不是1呢?

321.jpg (28.49 KB, 下载次数: 41)

321.jpg

作者: 黑马-张洋    时间: 2013-2-26 16:35
李志卫 发表于 2013-2-26 16:28

    System.out.println("i1:"+i1);//这里就是第二步的i1

这是结论啊,我知道。
我就想知道凭什么,为什么就要取第二步的i1

作者: lzw123451    时间: 2013-2-26 16:42
黑马-张洋 发表于 2013-2-26 16:35
System.out.println("i1:"+i1);//这里就是第二步的i1

这是结论啊,我知道。

我的答案有编辑,  因为变量i1只有一个啊,第一步的时候赋值了一次 i1=1, 第二步又重新赋值了一次 i1=0.
这个变量谁最后赋值就等于谁的,它总不能储存两个值把。
作者: 黑马-张洋    时间: 2013-2-26 16:51
李志卫 发表于 2013-2-26 16:42
我的答案有编辑,  因为变量i1只有一个啊,第一步的时候赋值了一次 i1=1, 第二步又重新赋值了一次 i1=0. ...

这话很有用:这个变量谁最后赋值就等于谁的,它总不能储存两个值把。
对,那i1绝对只有一个。我理解您的想法了。或者您的思维过程吧
和我的完全不一样
当我看到
x=x++
我以为:右边的x先把值赋值左边的x之后,右边的x再自己增加1。
那么就出现了2个x
然后我就在想这打印句来里的到底取了哪个x呢

现在按你的思路来就始终只有一个x了
谢谢您了
作者: 贾文泽    时间: 2013-2-26 16:53
黑马-张洋 发表于 2013-2-26 16:33
先说
打印结果
i1:0

  1.         public static void main(String argv[]) {
  2.                 int i1 = 0;
  3.                 i1 = i1++;//       i1=0       i1++;这个表达式的值是不是还是0   那把0赋给i1,i1是不是就等于0了,自然下面这句输出 i1=0
  4.                 System.out.println("i1:"+i1);//
  5.                
  6.                 int i2=0;
  7.                 int i3;
  8.                 i3=i2++;//                 i2++; 这个表达式的值是0,那 <span style="line-height: 1.5;">i3自然就是0么</span>
复制代码

作者: lzw123451    时间: 2013-2-26 16:59
黑马-张洋 发表于 2013-2-26 16:51
这话很有用:这个变量谁最后赋值就等于谁的,它总不能储存两个值把。
对,那i1绝对只有一个。我理解您的 ...

共同进步




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2