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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Style栉 中级黑马   /  2014-3-26 16:26  /  1492 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Style栉 于 2014-3-26 18:53 编辑

int i=3;
i=i++;
System.out.print(i);
//为啥会是3啊....虽然是先给左边的i赋值.可是不还是做++操作么

13 个回复

倒序浏览
i=i++相当于    i=i ; i++;  
它是先把i值赋给i,然后再进行相加
回复 使用道具 举报
i++这个是先运算在执行++动作,所以是先将i的值赋给i,i的值就是3,然后又执行的++动作
回复 使用道具 举报
这个中包含了两个知识点,一是赋值,2是自增的问题
想一下你现在定义的是 int i =3 ;在执行 i = i++;的时候,先做的是赋值的动作,后做的事自增,

在输出语句执行到的时候,就把 3 给输出来了
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i = 3,b;
  6.                         b=i;
  7.                         i++;
  8.                
  9.                 System.out.println(b+";"+i);
  10.         }
  11. }
复制代码

这样就能看到 i 自增后的值了
回复 使用道具 举报
  1. int i=3;
  2. i=i++;
  3. System.out.print(i);
复制代码


你理解错了,这样理解
首先,i=3;
然后,把i赋值给i,i此时是3,i打印后才加1
  1. int i = 3;
  2.                 System.out.println(i++);
  3.                 System.out.println(i);
复制代码

这样能理解吗?
回复 使用道具 举报
i++,是先赋值后运算的。相当于把i的值赋给i,i再自增加1。如果是++1,打印出来就是4,因为是先自增后运算。其实,这个知识点很好记,你只要看他的++符号在哪边,如果是在左边就是先自增后运算,如果是右边则是先运算后自增。
回复 使用道具 举报
在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。 语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存如堆栈中。 因为i = i++;是先将i的值(3)存入堆栈,然后对变量区中的i自加1,这时i的值的确是4,但是随后的istore_1又将堆栈的值(3)弹出赋给变量区的i,所以最后i = 3。
回复 使用道具 举报
    Code:        0: iconst_3              1: istore_1              2: iload_1               3: iinc          1, 1        6: istore_1     
回复 使用道具 举报
javap -c Demo.class
回复 使用道具 举报
菜小徐 发表于 2014-3-26 16:29
i=i++相当于    i=i ; i++;  
它是先把i值赋给i,然后再进行相加

那最后不是也进行++操作了么  虽然是先赋值
回复 使用道具 举报
年轻的老头 发表于 2014-3-26 17:59
在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。 语句istore_1是 ...

明白....原来是这样..
回复 使用道具 举报
Style栉 发表于 2014-3-26 18:42
那最后不是也进行++操作了么  虽然是先赋值

i(1)=i(2)++;我先把两个i编号,当作两个数来看,程序要输出的是i(1),而i(1)已经被赋值为i(2),所以不管i(2)++还是--都已经与i(1)无关了,程序直接输出i(1)就行了。当然i(2)的值的确发现修改了。
回复 使用道具 举报
菜小徐 发表于 2014-3-26 19:39
i(1)=i(2)++;我先把两个i编号,当作两个数来看,程序要输出的是i(1),而i(1)已经被赋值为i(2),所以不管 ...

明白了..谢谢
回复 使用道具 举报
学习代码 发表于 2014-3-26 16:38
这个中包含了两个知识点,一是赋值,2是自增的问题
想一下你现在定义的是 int i =3 ;在执行 i = i++;的时 ...

明白了.谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马