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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:

     
  1. public class zxc{
  2.         public static void main(String args[]){
  3.                 int i=4;
  4.                 i=i++ -1;
  5.                 System.out.println(i);
  6.         }
  7. }
复制代码


不是应该这样:i=4 - 1然后i++。。结果等于4的吗??为什么输出的 i 是等于3

老司机。。求带。。。

21 个回复

倒序浏览
你减2看看,也许你就知道了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
是3,在运算中,如++2  + 1是2先自增1变成3,然后3+1等于4。而2++   +1是2先和1相加得3。总结:在运算中,++在变量的是变量先自增,后进行后面的运算;而++在变量的后面,是变量先进行后面的运算,后自增1
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
就是3,如果你用for循环试试就更好了。
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
首先来介绍一下i++:
[Java] 纯文本查看 复制代码
		/**1. i = i++操作的底层实现原理
		 * 2. 先将i赋给一个临时变量
		 * 3. 然后i = i + 1;
		 * 4. 然后再将 临时变量_temp赋值给i;
		 */
		temp = i;
		i = i + 1;
		i = temp;

这就解释了为什么你得到的i = i++ -1的结果是3而不是4.

回复 使用道具 举报
慢慢来,这个东西用多了就会了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
i++ -1  .分析 :  第一步,i=4  ; 第二步 : i = 4 - 1 赋值给i = 3  第三步 : i最后再完成++ 并没有赋值给i了.  所以打印输出的是3.  懂了吗
回复 使用道具 举报
i = i++ -1;

你把i++当成一个整体,另a = i++,所以a = 4,
i = 4 - 1 = 3.
回复 使用道具 举报
感谢各位老司机。。研究了一下感觉找到规律了。。。先是i=4-1,不赋值,i++  --->i=5.最后执行i=4-1--->输出i等于3
回复 使用道具 举报
不问还好,一问我也蒙了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
贾文和 发表于 2017-1-14 16:18
i++ -1  .分析 :  第一步,i=4  ; 第二步 : i = 4 - 1 赋值给i = 3  第三步 : i最后再完成++ 并没有赋值给i ...

你的分析过程有问题
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
guyouzhong 发表于 2017-1-15 00:03
你的分析过程有问题

++在后面呀- -.!!  我也是才学的.        在后面是先运算后赋值啊
回复 使用道具 举报
贾文和 发表于 2017-1-15 08:56
++在后面呀- -.!!  我也是才学的.        在后面是先运算后赋值啊

i = i++ -1;的运算过程,其底层实现:将i的值付给一个临时变量进行计算
第一步:_temp = i;
第二步:i = i+1;
第三步:i = _temp -1;
所以结果是i = 3;
你想如果运算式是:j = i++ -1;那么 i和j的结果又是多少呢?自己分析下底层,(欢迎查看我的关于自增的那条帖子,谢谢评论并给出正确答案和底层分析)
回复 使用道具 举报
guyouzhong 发表于 2017-1-15 09:40
i = i++ -1;的运算过程,其底层实现:将i的值付给一个临时变量进行计算
第一步:_temp = i;
第二步:i = ...

其实i = ++i -1;和i = i++ -1;的底层不同之处无非在于第一步和第二步先后的问题,从而导致结果不一样。
回复 使用道具 举报
newu 黑马帝 2017-1-15 11:01:24
16#
不问还好,一问我也蒙了
回复 使用道具 举报
guyouzhong 发表于 2017-1-15 09:40
i = i++ -1;的运算过程,其底层实现:将i的值付给一个临时变量进行计算
第一步:_temp = i;
第二步:i = ...

j = 3;
i = 5;
是不是呀?
回复 使用道具 举报
guyouzhong 发表于 2017-1-15 00:03
你的分析过程有问题

i++并没有赋值给i你确定?????
回复 使用道具 举报
月微怜 发表于 2017-1-15 21:55
i++并没有赋值给i你确定?????

赋值是临时变量的计算结果进行的,自增是在赋值之前。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马