资讯专栏INFORMATION COLUMN

i++和++i的区别

xfee / 1736人阅读

摘要:在牛客网做题遇见了这道题,又勾起了我对和的无限怨念,所以今天要搞懂它输出结果为原先的理解为是先赋值,然后再自增是先自增,后赋值。

在牛客网做题遇见了这道题,又勾起了我对i++和++i的无限怨念,所以今天要搞懂它

 @Test
  public void test(){
      int i = 0;
      i=i++;
      System.out.println(i); //输出结果为0
  }

原先的理解为:

i++是先赋值,然后再自增;++i是先自增,后赋值。
用代码表示就是:
若 a = i++; 则等价于 a=i;i=i+1;
而 a = ++i; 则等价于 i=i+1;a=i;

但是牛客网的题打破了我的幻想, 如果按原先定义,就应该是i=i;i=i+1; 那么结果就应该是1;但是很遗憾结果是0;所以得知原先定义有误,至少是不准确的。 这个是为什么呢?

我简单用代码模拟如下真实流程:

   int i;

   @Test
   public void testAddI() {
       i = 0;
       i = lastAdd();
       System.out.println(i);
       i = 0;
       i = firstAdd();
       System.out.println(i);
   }

   //模拟i++的机制
   public int lastAdd() {
       //操作i前对其值保留副本
       int temp = i;
       i = i + 1;
       //返回副本
       return temp;
   }

   //模拟++i的机制
   public int firstAdd() {
       i = i + 1;
       return i;
   }

输出结果为0和1,和i=i++以及i=++i的结果一致。

结论:在java的执行过程中,i++和++i都直接对i进行了i=i+1的操作,但是不同的是i++得到的是i未进行加法操作的前的值的副本,而++i直接得到计算后的值

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74495.html

相关文章

  • for循环for in在遍历数组中区别

    摘要:举个例子,如果你的数组中有一个可枚举属性,循环将额外执行一次,遍历到名为的索引。就连数组原型链上的属性都能被访问到。某些情况下,可能按照随机顺序遍历数组元素。 困惑 在练习数组操作的时候,希望实现删除数组中特定元素(比如删除字符1)的功能很容易地就想到了利用for循环和splice方法 for (let i = 0; i < hobbies.length; i++) { ...

    wangbinke 评论0 收藏0
  • C语言中breakcontinue用法区别

    摘要:文章目录前言一循环体中两者的作用循环语句语句循环语句语句循环语句语句二语句总结前言本文将通过简单的实例来详细分析在语言中语句和语句的用法和区别,欢迎大家批评指正。 ...

    Raaabbit 评论0 收藏0
  • 2018驾考宝典面试总结

    摘要:大家好,我来自驾考宝典。同时,我在驾考宝典也工作一年多了。驾考宝典算不上一线大公司,但我个人不管是通过工作,平常的积累,还是自主学习,我觉得还是能和大家分享一些更加实战化的面试题。并处理好广大安卓机的兼容性。 大家好,我来自驾考宝典。时间不知不觉进入2018金九银十,下半年的尾声了,想必很多朋友已经看过网上新出的各大厂面试题。同时,我在驾考宝典也工作一年多了。驾考宝典算不上一线大公司,...

    tomener 评论0 收藏0
  • 2018驾考宝典面试总结

    摘要:大家好,我来自驾考宝典。同时,我在驾考宝典也工作一年多了。驾考宝典算不上一线大公司,但我个人不管是通过工作,平常的积累,还是自主学习,我觉得还是能和大家分享一些更加实战化的面试题。并处理好广大安卓机的兼容性。 大家好,我来自驾考宝典。时间不知不觉进入2018金九银十,下半年的尾声了,想必很多朋友已经看过网上新出的各大厂面试题。同时,我在驾考宝典也工作一年多了。驾考宝典算不上一线大公司,...

    EdwardUp 评论0 收藏0

发表评论

0条评论

xfee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<