關於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倍之多!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM