浅谈++i和i++区别

下午基友突然问我++i和i++啥区别,我随口扔了句先增后用和先用后增,顺便自己写了个java代码显摆了一下,达到了想要的结果,这么写的

        int i = 0, k = 0;
        /**/
        for (int j = 0; j < 10; j++) {
            i = i++;
            k = ++k;
        }
        System.out.println("i的最后结果:" + (i));
        System.out.println("k的最后结果:" + (k));

执行结果:

i的最后结果0
k的最后结果10

但是越看越不淡定了,i怎么也得自增啊肯定不是0啊,但是结果就是0.

刚开始学习的C,java的时候,老师都讲过自增形式:即:i++和++i;

其实区别在于,i=i++是先赋值在自增,所以无论循环多少次,左边的i始终是0,最后结果就是0.改成i=++i,是可以达到效果的,++i是先自增在赋值。

我笃定是因为java编译器的问题,因为改成下面的样子就没有异议

        int i = 0, k = 0;
        /**/
        for (int j = 0; j < 10; j++) {
            i++;//或者i = i+1
            ++k;
        }
        System.out.println("i的最后结果:" + (i));
        System.out.println("k的最后结果:" + (k));

i的最后结果10
k的最后结果10

那就换成VS试试,用C#吧,代码如下:

            int m = 0,n = 0;  
            for (int j = 0; j < 10; j++) 
            {  
                m=m++;  
                ++n;
            }

            MessageBox.Show("m的最后结果:" + (m) + ";" +"n的最后结果:" + (n));

结果:

m的最后结果0;n的最后结果10

没有任何的问题,不是IDE的问题,姑且这么理解吧:
    public  static int count(int i) {  
        // TODO Auto-generated method stub  
        //选保存初始值,编译器开辟的临时变量区  
        int temp=i;  
        //做自增  
        i = i++;  
        //返回原始值  
        return temp; 
    }

所以,要自增就用i=++i,但是一般是直接用i++,这样更好;这也算是一个自增陷阱。

 

posted on 2017-03-23 21:30  qfoxzjd  阅读(173)  评论(0)    收藏  举报