黑马程序员技术交流社区

标题: 今天刚学了自增(a++/++a),遇到了个问题。不太懂。。 [打印本页]

作者: 月微怜    时间: 2017-1-13 23:34
标题: 今天刚学了自增(a++/++a),遇到了个问题。不太懂。。
代码如下:

     
  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

老司机。。求带。。。
作者: 喔喔    时间: 2017-1-13 23:38
你减2看看,也许你就知道了

作者: gczsjj    时间: 2017-1-14 00:03
是3,在运算中,如++2  + 1是2先自增1变成3,然后3+1等于4。而2++   +1是2先和1相加得3。总结:在运算中,++在变量的是变量先自增,后进行后面的运算;而++在变量的后面,是变量先进行后面的运算,后自增1

作者: 随性自然    时间: 2017-1-14 00:06
就是3,如果你用for循环试试就更好了。

作者: guyouzhong    时间: 2017-1-14 13:32
首先来介绍一下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.


作者: 烟雨清寒时    时间: 2017-1-14 14:59
慢慢来,这个东西用多了就会了

作者: 贾文和    时间: 2017-1-14 16:18
i++ -1  .分析 :  第一步,i=4  ; 第二步 : i = 4 - 1 赋值给i = 3  第三步 : i最后再完成++ 并没有赋值给i了.  所以打印输出的是3.  懂了吗
作者: a469517790    时间: 2017-1-14 17:16
i = i++ -1;

你把i++当成一个整体,另a = i++,所以a = 4,
i = 4 - 1 = 3.
作者: 月微怜    时间: 2017-1-14 23:09
感谢各位老司机。。研究了一下感觉找到规律了。。。先是i=4-1,不赋值,i++  --->i=5.最后执行i=4-1--->输出i等于3
作者: 愤怒的大飞机    时间: 2017-1-14 23:23
不问还好,一问我也蒙了

作者: guyouzhong    时间: 2017-1-15 00:03
贾文和 发表于 2017-1-14 16:18
i++ -1  .分析 :  第一步,i=4  ; 第二步 : i = 4 - 1 赋值给i = 3  第三步 : i最后再完成++ 并没有赋值给i ...

你的分析过程有问题

作者: 贾文和    时间: 2017-1-15 08:56
guyouzhong 发表于 2017-1-15 00:03
你的分析过程有问题

++在后面呀- -.!!  我也是才学的.        在后面是先运算后赋值啊
作者: guyouzhong    时间: 2017-1-15 09:40
贾文和 发表于 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:42
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
不问还好,一问我也蒙了
作者: 贾文和    时间: 2017-1-15 16:07
guyouzhong 发表于 2017-1-15 09:40
i = i++ -1;的运算过程,其底层实现:将i的值付给一个临时变量进行计算
第一步:_temp = i;
第二步:i = ...

j = 3;
i = 5;
是不是呀?
作者: 月微怜    时间: 2017-1-15 21:55
guyouzhong 发表于 2017-1-15 00:03
你的分析过程有问题

i++并没有赋值给i你确定?????
作者: guyouzhong    时间: 2017-1-15 22:17
月微怜 发表于 2017-1-15 21:55
i++并没有赋值给i你确定?????

赋值是临时变量的计算结果进行的,自增是在赋值之前。

作者: 袁志娜    时间: 2017-1-15 23:34

作者: Mbs2016    时间: 2017-1-23 07:14
感觉好多地方都没学的很深入。

作者: xxy0219    时间: 2017-1-23 17:19
你把第四行代码改成 i=i++ 然后输出i 结果是4 他没有变成5  你就明白了.




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