日期:2014-05-17  浏览次数:20820 次

请问这两种for+if的写法哪个更消耗性能呢?
写法一:
Java code

int tag = 1;
if(tag==1){
    for(int i=0; i<10000; i++){
        System.out.print("测试A:"+i);
    }
}else{
    for(int i=0; i<10000; i++){
        System.out.print("测试B:"+i);
    }
}



写法二:
Java code

int tag = 1;
for(int i=0; i<10000; i++){
    if(tag==1){
        System.out.print("测试A:"+i);
    }else{
        System.out.print("测试B:"+i);
    }
}



------解决方案--------------------
第一种好撒, 一个是不停的判断一个是至判断一次,你认为呢
------解决方案--------------------
实践是检验真理的唯一标准,自己测试下不就完了?

目测是方法一更快,因为if语句执行的次数少了,但实际使用中所能带来的性能提升微乎其微,基本可以忽略不计。

而且方法一代码显得太累赘,所以方法二更合适。


------解决方案--------------------
第一种写法好;因为第一种写法只需要判断一次;而第二种写法需要去循环的判断,这样很费时
------解决方案--------------------
Java code

        int tag = 1;
        String method = tag == 1 ? "测试A" : "测试B";
        for (int i = 0; i < 10000; i++) {
            //循环就尽量让它只是循环
            System.out.println(method + i);
        }

------解决方案--------------------
探讨
但是如果是个很复杂的if语句,那么又会有什么情况呢?

------解决方案--------------------
楼主有点钻牛角尖了
不过这个牛角尖我以前也钻过~ 
没什么必要在乎这种if对效率的影响 就算他很复杂 时间也只是原来的n(常数)倍
而现实中时间一般是很小的 10^6次循环 还不到0.001秒。 乘以个10, 也感觉不到。


------解决方案--------------------
写个程序大体测一下试试
Java code
    public static void main(String[] args) {
        int tag = 1;
        java.util.Date begin=new java.util.Date();
        if(tag==1){
            for(int i=0; i<10000; i++){
                System.out.print("测试A:"+i);
            }
        }else{
            for(int i=0; i<10000; i++){
                System.out.print("测试B:"+i);
            }
        }
        java.util.Date end=new java.util.Date();
        System.out.println();
        System.out.println(end.getTime()-begin.getTime());
        
        java.util.Date begin1=new java.util.Date();
        for(int i=0; i<10000; i++){
            if(tag==1){
                System.out.print("测试A:"+i);
            }else{
                System.out.print("测试B:"+i);
            }
        }
        java.util.Date end1=new java.util.Date();
        System.out.println();
        System.out.println(end1.getTime()-begin1.getTime());
    }

}

------解决方案--------------------
探讨

写个程序大体测一下试试
Java code
public static void main(String[] args) {
int tag = 1;
java.util.Date begin=new java.util.Date();
if(tag==1){
for(int i=0; i<10000; i++)……

------解决方案--------------------
看情况而定
------解决方案--------------------
JVM 很聪明,这种代码会进行优化,不管你怎么写!