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. 最短路 Dijkstra模板

    普通dijkstra,复杂度O(n*n) #include<bits/stdc++.h> using namespace std; int n,m,f[105][105],dis[105] ...

  2. 分布式系统理论基础1: 一致性、2PC和3PC

    本文转自 https://www.cnblogs.com/bangerlee/p/5268485.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...

  3. CJE-Jenkins认证工程师考试预约报名流程

    先决条件 考试费用150美元,需要由master/visr信用卡支付 考试全英文  哈哈哈 考试目的 通过各种渠道能够找到Jenkins的学习资料,并能够完成jenkins的配置管理,还是想全面的系统 ...

  4. 关于sql中日期操作

    select * from account where  DAYOFWEEK('2019-11-30') =7 limit 10 DAYOFWEEK对应结果: 周日:1 周一:2 周二:3 周三:4 ...

  5. 查看.Net Framework的版本(PC和WinCE)

    一.在电脑上查看.Net Framework的版本 (1)第一步: 打开“我的电脑“,在地址栏输入 %systemroot%\Microsoft.NET\Framework 第二步:从列出来的文件夹中 ...

  6. JSP 虚拟路径设置

    编辑server.xml 在Host标签内加  :path为虚拟路径  docBase为绝对路径 <Context path="/icon"  docBase="C ...

  7. Java.io包

    Java.io.BufferedInputStream 类添加功能到另一个输入流,缓冲输入以及支持mark和reset methods.Following是关于缓冲输入流的要点: 当创建缓冲输入,创建 ...

  8. HBase优化——读写优化

    Hbase2.0查询优化 1)设置scan缓存 HBase中Scan查询可以设置缓存,方法是setCaching(),这样可以有效的减少服务端与客户端的交互,更有效的提升扫描查询的性能. Scan s ...

  9. 用Emacs进行Python开发

    用Emacs进行Python开发 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} ...

  10. Linux部分常用命令详解(一)

    echo 命令详解 格式: echo string 显示普通字符: echo "it is a test" 或者 echo it is a test 显示转义字符: echo &q ...