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

 

关于if else 和 三目运算符的效率问题-java的更多相关文章

  1. i=i+1与i+=1的区别及效率(Java)

    原博客地址 在做个java优化的PPT时,看到了i=i+1与i+=1的区别,在这之前还真没想到那么细. 1.x=x+1,x+=1及x++的效率哪个最高?为什么? x=x+1最低,因为它的执行如下. ( ...

  2. 001 发大招了 神奇的效率工具--Java代码转python代码

    今天发现一个好玩的工具: 可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: 下载链接如下: http://www.antlr3.org/downloa ...

  3. ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)

    通过index获取元素的值 java里面的链表可以添加索引,而C中的链表,是没有索引的 package ArrayListVSLinkedList; import java.util.ArrayLis ...

  4. 浅谈C++/JAVA/C#运行机制和执行效率

    估计有很多同学都对C++/JAVA/C#这三大热门语言的运行机制和执行效率有或多或少的困惑,自己也有,但是经过前期的学习,了解了三者在这两方面的区别,就废话不说了,进入主题吧.         一.运 ...

  5. PHP 比 Java 的开发效率高在哪?

    PHP 比 Java 的开发效率高在哪? 现在很多互联网应用都是php开发的,在很多人的观念里已经把php与java分到了两个开发领域,php是互联网,java是企业应用. 都说php的开发效率高,更 ...

  6. 《新版阿里巴巴Java开发手册》提到的三目运算符的空指针问题到底是个怎么回事?

    最近,阿里巴巴Java开发手册发布了最新版--泰山版,这个名字起的不错,一览众山小. 新版新增了30+规约,其中有一条规约引起了作者的关注,那就是手册中提到在三目运算符使用过程中,需要注意自动拆箱导致 ...

  7. android自定义控件(5)-实现ViewPager效果

    对于系统的ViewGroup我们已经是十分熟悉了,最常用的LinearLayout和RelativeLayout几乎是天天要打交道,下面我们就来看看,如何一步一步将其实现: 一.首先当然也是最通常的新 ...

  8. JavaSE理论篇

    将已学过的知识记录在此,既能便于以后温习又能方便知识共享,做到共同成长. 计算机语言发展简史 主要分为三个阶段 机器语言:打点机,有点表示1,没有表示0,打点计时器 低级语言:汇编语言 高级语言:Ja ...

  9. 【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果

    基于灰度世界.完美反射.动态阈值等图像自动白平衡算法的原理.实现及效果      白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题.白平衡是随着电子影像再现色彩真实 ...

随机推荐

  1. websocket 中使用Service层的方法

    创建公共Utils 类 ApplicationContextRegister @Component @Lazy(false) public class ApplicationContextRegist ...

  2. 文本处理工具——sed基础

    一sed介绍 三剑客是grep,sed,awk,功能都很强大. 其中sed是Stream EDitor,流编辑器 行,编辑器的简写,它一次处理一行内容. sed的强大在于可以对文件进行修改,很适合在脚 ...

  3. bzoj 3251

    http://www.lydsy.com/JudgeOnline/problem.php?id=3251 这道题在北京八十中的时候有人讲过.. 不过由于自己continue 写掉了一个所以调了很久. ...

  4. 大碗宽面Beta迭代阶段第十二周会议记录

    本周一晚上我们在熟悉的宿舍楼一楼大厅进行了本周的小组会议. 对于上周的任务,前端的同学修改统一了导航栏和footer,在课程评价界面中添加了“添加评论”功能,其中含有,是否修改过该课程的单选框,评论, ...

  5. js打印窗口内容并当窗口内容较长时自动分页

    项目环境Angular: 方法1.window.print() HTML页面上的代码: <div id="tenementBillTable" class="dia ...

  6. Linux系统Centos查看IP地址,不显示IP地址或者显示127.0.0.1

    1.桌面界面 右上角有个电脑的图标,鼠标悬停会显示no network connect 点击一下图标,选择连接的网络则ok 2.命令行界面 在命令行界面输入 vi  /etc/sysconfig/ne ...

  7. Portal for ArcGIS启动失败,无法访问任何门户计算机,请联系您的系统管理员。

    1.如题,打开Portal门户的时候,发现: 2.检查日志发现Portal for ArcGIS没启动,日志地址:D:\Program Files\ArcGIS\Portal\framework\se ...

  8. Android 发布自动版本号方案

    以前看到一些自动化版本号打包的文章.如果您的项目是用 Git 管理的,并且恰巧又是使用 Gradle 编译(应该绝大部分都是这样的了吧?),本文试图找到一种更加优雅的自动版本管理方法. 背景 我们都知 ...

  9. B - Heshen's Account Book HihoCoder - 1871

    题目链接:https://hihocoder.com/problemset/problem/1871 思路:满满的细节满满的坑,尤其是 123df123 居然也要算成123123 的时候真是惊呆了,我 ...

  10. WPF常规表单验证

    1:ViewModel 实现验证接口 IDataErrorInfo 2:实现接口的相关验证逻辑,并把错误信息反馈给 Error public string this[string columnName ...