关于if else 和 三目运算符的效率问题-java

1.从类型转换上看,因为三目运算符在做判断的时候需要考虑到类型转换的问题,而if else 不需要考虑类型转换。 
所以 if else 效率高一点。 
2.从总体上看 
A:需要考虑到循环自身所占用的时间。 
B:需要考虑到赋值以及循环内的其他运算符所占用的时间。 
所以 三目运算符效率高一点.

  接下来一段代码来演示 2.

public class TestIfElse {

    public static void main(String[] args) {
        double f = 0;
        final int times = 100;
        double min = 1000;
        double max = 0;
        //取100次平均。其实可以再多,但是耗时太长了,意义并不是很大。
        for(int i=0; i<times; i++){
            double df = test();
            System.out.println("df["+i+"] = "+df);
            f +=df;
            if(min>df){
                min = df;
            }
            if(max<df){
                max = df;
            }
        }
        f /=times;
        System.out.println("------->min = "+min);
        System.out.println("------->max = "+max);
        System.out.println("------->ave = "+f);
    }

    private static double test(){
        //来点计算,用处不大。
        long sum = -1;
        //循环次数,有点大哦,自己悠着点调
        final int max = 100000000;
        //下面给出一个包含循环和计算的耗时统计,作为一个基础。后面的统计必然包含此部分时间
        long timeS = System.currentTimeMillis();
        for(int i=0; i<max; i++){
            sum = i+i;
        }
        long timeE = System.currentTimeMillis();
        long delta = timeE - timeS;

        //计算出一个布尔值,免得后面还要计算而占用时间,造成误差。
        boolean flag = sum>0;
        //下面是If/Else(包含循环和计算)的耗时统计,真实耗时应当除去上面的基准值
        long timeS1 = System.currentTimeMillis();
        for(int i=0; i<max; i++){
            if(flag){
                sum = i+i;
            }else{
                sum = i+i;
            }
        }
        long timeE1 = System.currentTimeMillis();
        long delta1 = timeE1 - timeS1;
        //这是真实的耗时计算
        long realIfElse = delta1-delta;


        //下面是三目运算符(包含循环和计算)的耗时统计,真实耗时同样应当除去前面的基准值
        long timeS2 = System.currentTimeMillis();
        for(int i=0; i<max; i++){
            sum = flag?i+i:i+i;
        }
        long timeE2 = System.currentTimeMillis();
        long delta2 = timeE2 - timeS2;
        //这是真实的耗时计算
        long realTri = delta2-delta;

        //返回耗时比率,以反映效率差别
        double f = (double)realIfElse / realTri;
        return f;
    }
}

结果:


------->min = 1.9841269841269842
------->max = 3.5161290322580645
------->ave = 2.6170264636067144

可以看出if else耗时是三目运算符的2.6倍之多!

 
原文地址:https://www.cnblogs.com/guoziyi/p/7153821.html