i++遇到赋值是这样的呢

GeekCesto 2016-09-13 10:58:51
public static void main (String args[])
{
demo n = new demo();
int i = 0;

i ++;
System .out . println( i); //i++时候打印出来是 1;eclipse测试

// i=i++;
// System .out . println( i); //i++时候打印出来是 0;eclipse测试


}



我的理解如下:
第一个是i++ 那么先是赋值为i=0 之后i++ 此刻实际内存i已经是1了。那么下来打印输出1
第二个是先赋值给 i,i=0 之后i++。那么不也应该是i的实际内存+1变成1了嘛。打印出来是0
...全文
904 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiyoki 2016-09-24
  • 打赏
  • 举报
回复
这个问题要看jls的规定,如果jls没规定,谭浩强教授在C的书里实际上为我们做了很好的启蒙:看编译器 楼上有些是将实现来倒退java语义,那是不可取的 不过我记得jls的确有说 i=i++ 的时候,因为遇上=会使++不发生+1动作的(先有语言定义,再有编译器实现)
  • 打赏
  • 举报
回复
引用 13 楼 nbandywang 的回复:
那如果是i=i+i++; i的结果又是多少呢?
还是0啊 表达式从右向左看 从变量i代表的空间内取值,是0,i++表达式为0,0 + 0为0,将0赋值给i
  • 打赏
  • 举报
回复
以前我还挺清楚的,现在糊涂了
形形色色的人 2016-09-23
  • 打赏
  • 举报
回复
引用 1 楼 qq_22043273 的回复:
第一个是i++; 打印出来 1; 是因为0++ 它是会在输出之前加出来的; 而第二个是 i=i++; 打印出来自然是0;因为它输出之前是计算的i=0++; 这个也不好说, 个人理解能力吧...
。。。。。。
Be_nurturing 2016-09-23
  • 打赏
  • 举报
回复
i++是先用i的初始值,用完一次加1. 第二个i= i++, 1.右边的i初始值是0 2.赋值给左边的i 3.右边的i自动+1 4.System.out.print(i)打印的是左边的i,i的值是0
东海游愚 2016-09-22
  • 打赏
  • 举报
回复
引用 13 楼 nbandywang 的回复:
那如果是i=i+i++; i的结果又是多少呢?
Jerry_CW 2016-09-22
  • 打赏
  • 举报
回复
第一:在自增中加号放后面是先输出后自增 第二:i=i++;是赋值,输出的是付给i的值
逗泥丸的平方 2016-09-19
  • 打赏
  • 举报
回复
引用 13 楼 nbandywang 的回复:
那如果是i=i+i++; i的结果又是多少呢?
你是谭浩强的学生吗
nick1993 2016-09-19
  • 打赏
  • 举报
回复
i=i++,是先赋值,再自增,即先计算i=i,再计算i++
侠路相逢 2016-09-16
  • 打赏
  • 举报
回复
那如果是i=i+i++; i的结果又是多少呢?
  • 打赏
  • 举报
回复
自增自减的过程你可以了解一下 在运用的时候自增自减要看作个整体,就像正负号一样,++、--是自增运算符和自减运算符,在前面就先运算,在后面就使用变量原来的值。 可以这样理解,你这个例子 ,i++这个表达式就是0,++i这个表达式就是1。 i = i++。就是把i++的值赋给i,因此i为0。
GeekCesto 2016-09-13
  • 打赏
  • 举报
回复
@qq_22043273 就是左i和右i是两个内存地址嘛
qq_22043273 2016-09-13
  • 打赏
  • 举报
回复
第一个是i++; 打印出来 1; 是因为0++ 它是会在输出之前加出来的; 而第二个是 i=i++; 打印出来自然是0;因为它输出之前是计算的i=0++; 这个也不好说, 个人理解能力吧...
nikyotensai 2016-09-13
  • 打赏
  • 举报
回复
i=0; i++是等于0,++i等于1, 你把0赋给i,i当然是0
Fly_fans 2016-09-13
  • 打赏
  • 举报
回复
先进行++再进行赋值 i++的表达式结果是0 那么赋值给i i也是0了 虽然在i++之后i变成了1 但是 i++是一个表达式,是一个方法,他返回的结果就是0。所以又把i改成了0
码上大侠 2016-09-13
  • 打赏
  • 举报
回复
你的逻辑是i=0 之后i++,的实际内存+1变成1了嘛。但是JVM不是这么做的,你把++想成一个方法就可以了,这个方法返回++前的值,而+1是在方法内完成的,所以执行i++的时候i变成了1,这个方法返回0,执行i=i++;又用方法的返回值(0)把1给覆盖了
逗泥丸的平方 2016-09-13
  • 打赏
  • 举报
回复
当然 真想写代码没必要这样写.
逗泥丸的平方 2016-09-13
  • 打赏
  • 举报
回复
对于 i = i++; 出现了这样的提示. The value changed at 'i++' is never used less... (Ctrl+F1) This inspection points out the cases where a variable value is never used after its assignment, i.e.:  - the variable never gets read after assignment OR  - the value is always overwritten with another assignment before the next variable read OR  - the variable initializer is redundant (for one of the above two reasons) OR  - the variable is never used. i++ 实际上操作的是内存中的一份拷贝. 原i值是返回值.
Romanceling 2016-09-13
  • 打赏
  • 举报
回复
从哪能找到++的源码贴出来看看
GeekCesto 2016-09-13
  • 打赏
  • 举报
回复
我该怎么回复下面的回答呢呢?
加载更多回复(2)

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧