关于if else 和 三目运算符的效率问题-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倍之多!
关于if else 和 三目运算符的效率问题-java的更多相关文章
- i=i+1与i+=1的区别及效率(Java)
原博客地址 在做个java优化的PPT时,看到了i=i+1与i+=1的区别,在这之前还真没想到那么细. 1.x=x+1,x+=1及x++的效率哪个最高?为什么? x=x+1最低,因为它的执行如下. ( ...
- 001 发大招了 神奇的效率工具--Java代码转python代码
今天发现一个好玩的工具: 可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: 下载链接如下: http://www.antlr3.org/downloa ...
- ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)
通过index获取元素的值 java里面的链表可以添加索引,而C中的链表,是没有索引的 package ArrayListVSLinkedList; import java.util.ArrayLis ...
- 浅谈C++/JAVA/C#运行机制和执行效率
估计有很多同学都对C++/JAVA/C#这三大热门语言的运行机制和执行效率有或多或少的困惑,自己也有,但是经过前期的学习,了解了三者在这两方面的区别,就废话不说了,进入主题吧. 一.运 ...
- PHP 比 Java 的开发效率高在哪?
PHP 比 Java 的开发效率高在哪? 现在很多互联网应用都是php开发的,在很多人的观念里已经把php与java分到了两个开发领域,php是互联网,java是企业应用. 都说php的开发效率高,更 ...
- 《新版阿里巴巴Java开发手册》提到的三目运算符的空指针问题到底是个怎么回事?
最近,阿里巴巴Java开发手册发布了最新版--泰山版,这个名字起的不错,一览众山小. 新版新增了30+规约,其中有一条规约引起了作者的关注,那就是手册中提到在三目运算符使用过程中,需要注意自动拆箱导致 ...
- android自定义控件(5)-实现ViewPager效果
对于系统的ViewGroup我们已经是十分熟悉了,最常用的LinearLayout和RelativeLayout几乎是天天要打交道,下面我们就来看看,如何一步一步将其实现: 一.首先当然也是最通常的新 ...
- JavaSE理论篇
将已学过的知识记录在此,既能便于以后温习又能方便知识共享,做到共同成长. 计算机语言发展简史 主要分为三个阶段 机器语言:打点机,有点表示1,没有表示0,打点计时器 低级语言:汇编语言 高级语言:Ja ...
- 【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
基于灰度世界.完美反射.动态阈值等图像自动白平衡算法的原理.实现及效果 白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题.白平衡是随着电子影像再现色彩真实 ...
随机推荐
- 最短路 Dijkstra模板
普通dijkstra,复杂度O(n*n) #include<bits/stdc++.h> using namespace std; int n,m,f[105][105],dis[105] ...
- 分布式系统理论基础1: 一致性、2PC和3PC
本文转自 https://www.cnblogs.com/bangerlee/p/5268485.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...
- CJE-Jenkins认证工程师考试预约报名流程
先决条件 考试费用150美元,需要由master/visr信用卡支付 考试全英文 哈哈哈 考试目的 通过各种渠道能够找到Jenkins的学习资料,并能够完成jenkins的配置管理,还是想全面的系统 ...
- 关于sql中日期操作
select * from account where DAYOFWEEK('2019-11-30') =7 limit 10 DAYOFWEEK对应结果: 周日:1 周一:2 周二:3 周三:4 ...
- 查看.Net Framework的版本(PC和WinCE)
一.在电脑上查看.Net Framework的版本 (1)第一步: 打开“我的电脑“,在地址栏输入 %systemroot%\Microsoft.NET\Framework 第二步:从列出来的文件夹中 ...
- JSP 虚拟路径设置
编辑server.xml 在Host标签内加 :path为虚拟路径 docBase为绝对路径 <Context path="/icon" docBase="C ...
- Java.io包
Java.io.BufferedInputStream 类添加功能到另一个输入流,缓冲输入以及支持mark和reset methods.Following是关于缓冲输入流的要点: 当创建缓冲输入,创建 ...
- HBase优化——读写优化
Hbase2.0查询优化 1)设置scan缓存 HBase中Scan查询可以设置缓存,方法是setCaching(),这样可以有效的减少服务端与客户端的交互,更有效的提升扫描查询的性能. Scan s ...
- 用Emacs进行Python开发
用Emacs进行Python开发 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} ...
- Linux部分常用命令详解(一)
echo 命令详解 格式: echo string 显示普通字符: echo "it is a test" 或者 echo it is a test 显示转义字符: echo &q ...