A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-张洋 中级黑马   /  2013-2-26 16:07  /  1499 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  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凭什么就取的是自增前?

9 个回复

倒序浏览
i1自增后还没有赋值给i1对象 ,你问题的关键在于i1++后没有再赋值
回复 使用道具 举报
这种情况你只需要分清楚 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;
回复 使用道具 举报
本帖最后由 李志卫 于 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: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:28

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

这是结论啊,我知道。
我就想知道凭什么,为什么就要取第二步的i1
回复 使用道具 举报
黑马-张洋 发表于 2013-2-26 16:35
System.out.println("i1:"+i1);//这里就是第二步的i1

这是结论啊,我知道。

我的答案有编辑,  因为变量i1只有一个啊,第一步的时候赋值了一次 i1=1, 第二步又重新赋值了一次 i1=0.
这个变量谁最后赋值就等于谁的,它总不能储存两个值把。
回复 使用道具 举报
李志卫 发表于 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: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>
复制代码
回复 使用道具 举报
黑马-张洋 发表于 2013-2-26 16:51
这话很有用:这个变量谁最后赋值就等于谁的,它总不能储存两个值把。
对,那i1绝对只有一个。我理解您的 ...

共同进步
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马