三元运算符与if..else有时能互换,之前总是使用if..else,也不知道他两之间性能怎样。今天做个测试对比一下。
package test;
public class test {
public static void main(String[] args) {
Test1();
System.out.println();
Test2();
}
private static void Test1() {
long startTime = System.currentTimeMillis();
for (long i = 0; i < 100000000; i++) {
int temp = 0;
if (temp == 0)
temp = 1;
else
temp = 2;
}
long endTime = System.currentTimeMillis();
System.out.print(endTime - startTime);
}
private static void Test2() {
long startTime = System.currentTimeMillis();
for (long i = 0; i < 100000000; i++) {
int temp = 0;
temp = temp == 0 ? 1 : 2;
}
long endTime = System.currentTimeMillis();
System.out.print(endTime - startTime);
}
}
通过循环测试两者运行时间,结果对比如下:
相对来看是三元运算性能较优吧,但是这个优势并不明显。而且,使用三元运算符,问号后面的类型如果不同的话会带来一些类型方面的问题。比如:
int i=1;
System.out.println((i>2)?1.0:1);
这时输出的就是1.0,这是需要注意的地方。可以看看这里 JavaSE规范