美文网首页
i++ 和 ++i 的再思考

i++ 和 ++i 的再思考

作者: AlanGuo | 来源:发表于2016-11-11 10:15 被阅读0次

以下是以前整理的笔记:

作为单独的语句:
i++;
++i;
没有区别,都是自增1,相当于 i=i+1;
------------
在表达式里使用,两者不同。
表达式里,i++  就是 i,  不 自增, 先使用。退出 表达式 时 再 自增。
表达式里,++i 就是 i=i+1,  先自增1, 再使用。退出 表达式 时 不另自增。
例如:int i=2,a;
a = i++;     a 为2
a = ++i;     a 为3
出了表达式后,打印 i, 输出为 3
------
for(c=1;c<5;++c) {printf("%d",c); return 0;}   循环体里有 return 0; 所以只执行一次循环体就结束了。

!!!!!!!!!!!!!!!!!!
*但是:虽然执行结果没有区别,i++比++i更加expensive(效率低,占更多资源)。原因是:
++i :当程序执行到这里时,会直接把i的值增加1,然后继续进行将要进行的运算
i++ :当程序执行到此处时,会 (1)创建一个i的copy;(2)将i自增1;(3)返回原来i的copy到原语句中,copy的值被拿来继续参与运算

引发再思考的原因是想起++无论前置还是后置,优先级都比赋值=要高,那为什么 int a = i++ 之后 a 还是被赋予了i 的原值呢?

仔细想了一下发现其实道理很简单,其实就是一个返回值的问题:

public class Solution
{
    public int i;

    public  int iPlusPlus(int i)
    {
        int iCopy = i;
        i += 1;
        this.i = i;
        return iCopy; // return original value of i
    }

    public int PlusPlusi(int i)
    {
        i += 1;
        this.i = i;
        return i;   // return current value of i
    }

    public static void main(String[] args)
    {
        Solution sol1 = new Solution();
        Solution sol2 = new Solution();

        int i = 1;
        int result1 = 1 + sol1.iPlusPlus(i);
        int result2 = 1 + sol2.PlusPlusi(i);

        System.out.println("i++: " + "result = " + result1 + "  i = " + sol1.i);
        System.out.println("++i: " + "result = " + result2 + "  i = " + sol2.i);
    }
}

运行结果:

i++: result = 2  i = 2
++i: result = 3  i = 2

相关文章

  • i++ 和 ++i 的再思考

    以下是以前整理的笔记: 引发再思考的原因是想起++无论前置还是后置,优先级都比赋值=要高,那为什么 int a =...

  • i++与++i

    i++先操作再++ ++i先++再操作

  • i++跟++i在JVM字节码上的区别

    大家都知道i++跟++i的区别: i++是先赋值再运算 ++i是先运算再赋值 那可能很多人没有写过i=i++或者i...

  • Java中的i++ 和 ++i 在for循环使用

    Java的i++ 和++i 的区别i++:先赋值,后计算;++i;先计算,后赋值。 for循环中的i++和++i...

  • 验证++i和i++的区别

    平时我们对k=++i和k=i++的区别解释一般记忆:++i就是i先自身加1再赋值给k;i++就是先将i赋值给k,i...

  • i++ 和 i+1

    ++ 是自增运算符 粗略的看 i++ 和 i= i+1 是一个意思 但区别在于 i++ 是先使用i的值 然后再使 ...

  • i++和++i的区别

    i++和++i有哪些区别? i++和++i都是实现变量i的自增,两者的区别在于i++是先运算,再加1,而++i是先...

  • i++和++i

    i++ 先赋值后相加 //结果65 ++i 先自加后赋值 //结果66

  • ++i和i++

    ++i和i++ 如果是自身使用,没有任何区别。 使用后再进行赋值时有区别: 前加:先自身+1再把结果赋值给...

  • i++和++i

    java场景一 打印结果: i: 0 j: 1 java场景二 打印结果: i: 0 j: 1

网友评论

      本文标题:i++ 和 ++i 的再思考

      本文链接:https://www.haomeiwen.com/subject/cnffpttx.html