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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王少岩 中级黑马   /  2012-8-13 23:59  /  1835 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

平时在写普通for循环的时候看大多人都是写for(int i=0;i<10;i++){}这样的形式,但是for循环中的 i++ 和 ++ i有没有区别呢?我试了一下for(int i=0;i<10;i++){System.out.println(i);}和for(int i=0;i<10;++i){System.out.println(i);}的结果相同,是不是i++和++i对for循环的结果没影响呢?如果没影响的话,在循环次数过多时哪一种的效率跟高一点啊?是i++还是++i?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
i++是先引用后增加,就是使用当前值之后再加1,需要一个临时变量来转储。
例如 j=i++这样解释
temp=i;
i=i+1;
j=temp;

++i是先增加后饮用,先加1之后使用i的新值,省去了对内存操作的环节。
j=++i解释为
i=i+1;
j=i;
再for循环中如果只关心结果不关心他的值就都是一样的。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
package com.yang.family;
/* ++i 和 i++ 和 --i 和i--和-i--和-i++之间的变化演练
* author  yang   xiping
* verion  1.6
*/
public class A_i_Every {
     public static void main(String[] args) {
                int i=8,j=4;
                int sum=0;
                System.out.println("输出的结果是:"+ ++i);//输出9
                System.out.println("输出的结果是:"+ --i);//输出8
                System.out.println("输出的结果是:"+ i++);//输出8,因为上一次输出是8,在这次输出中先是输出原值8,再执行后加加。
                System.out.println("输出的结果是:"+ i--);//输出9,这个一个道理,后减减,实现将原纸打印出来,在进行自减。
                System.out.println("输出的结果是:"+ -i--);//输出-8
                System.out.println("输出的结果是:"+ -i++);//输出-7
                System.out.println("输出的结果是:"+ i++ );//输出8
                sum=(j+i++);//输出13  是因为j原值是4,i上一层输出时8,后来自加,变9,结果sum=13.
                System.out.println(sum);
        }      
}
如果是在循环中,这个是没有影响的。比如这个冒泡排序吧,无论怎么样,先加加,后加加都会根据条件判断后才执行程序的相应的代码段。就是在++i 和i++ 就在效率上应该是前者吧,他毕竟是符合for循环的流程规定。而且是没有思路上阻塞。如下是个for先后加的例子。
package com.name.yang;

/*
* 冒泡法排列
*/
public class First_bubbles {
        public static void main(String[] args) {
                int arr[] = { 0, 1, 6, -1, 9, 45, 90, -76, 2, 12, 7, 89, -34 };
                bubble bble = new bubble();
                bble.sort(arr);
                System.out.println("use the bubble number compare and get the answer");
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr[i] + " ");
                }
        }
}

/*
* 定义一个类,将其方法封装
*/
class bubble {
        public void sort(int arr[]) {
                int temp = 0;
                for (int i = 0; i < arr.length - 1; ++i) {
                        for (int j = 0; j < arr.length - 1 - i; ++j) {
                                if (arr[j] > arr[j + 1]) {
                                        temp = arr[j];
                                        arr[j] = arr[j + 1];
                                        arr[j + 1] = temp;
                                }
                        }
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
i++与++i的区别和C语言是一样的:
i++是先使用i的值然后i才自加1
++i是i的值先自加1再使用i的值
回复 使用道具 举报
金_鑫 发表于 2012-8-14 01:05
i++是先引用后增加,就是使用当前值之后再加1,需要一个临时变量来转储。
例如 j=i++这样解释
temp=i;

也就是说i++和++i对循环结果没影响,考虑效率的话应该是++i更高一点吧,因为他不用建立临时变量,不用总在内存中开辟空间,是吧
回复 使用道具 举报
王少岩 发表于 2012-8-14 08:44
也就是说i++和++i对循环结果没影响,考虑效率的话应该是++i更高一点吧,因为他不用建立临时变量,不用总 ...

是的 :)喜欢用++i的多一些
回复 使用道具 举报
谢谢大家。问题已解决
回复 使用道具 举报
++i和i++
前者是先自增在运算,后者是先运算在自增。
不过++i好像效率高一点,但是很多人(包括我)都习惯了i++
回复 使用道具 举报
在内建数据类型的情况下,效率没有区别;

在自定义数据类型的情况下,++i效率更高!

分析:

(自定义数据类型的情况下)

++i返回对象的引用;

i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马