if elseと三目演算子の効率問題(java版)について
4900 ワード
1.タイプ変換から見ると、三目演算子は判断する際にタイプ変換の問題を考慮する必要があり、if elseはタイプ変換を考慮する必要がないからである.だからif elseは効率が高いです.2.全体的にA:サイクル自体にかかる時間を考慮する必要があります.B:割り当てやループ内の他の演算子にかかる時間を考慮する必要があります.したがって、三目演算子の効率は少し高い.
結果:
if elseの消費時間は三目演算子の2.6倍以上であることがわかります!
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; idouble df = test();
System.out.println("df["+i+"] = "+df);
f +=df;
if(min>df){
min = df;
}
if(maxout.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; ilong timeE = System.currentTimeMillis();
long delta = timeE - timeS;
// , , 。
boolean flag = sum>0;
// If/Else( ) ,
long timeS1 = System.currentTimeMillis();
for(int i=0; iif(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; ilong 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倍以上であることがわかります!