关于ifelse和三⽬运算符的效率问题-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倍之多!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。