• 关于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倍之多!

     
  • 相关阅读:
    css文本溢出省略号
    SQL语句判断是否为今天或昨天
    git 常用命令
    SwitchHosts—hosts管理利器
    ORACLE ERP consolidation流程(一)
    R12 AR INVOICE 接口表导入
    FA模块的10个API范例
    使用dbms_profiler包测试存储过程性能
    WebADI应用到Office 2016 64-bit
    Oracle EBS主界面的Top Ten List
  • 原文地址:https://www.cnblogs.com/guoziyi/p/7153821.html
Copyright © 2020-2023  润新知