我们的java项目,要不要废弃switch

java项目中要不要废弃使用switch

先看switch是怎么产生的:

很久以前,计算能力很昂贵,电脑性能很差,人们便想着法子的提高执行效率
先看看if(test==0)的处理逻辑:
先是把test的值放在一个寄存器中,然后把0放在另一个寄存器中,然后做减法,然后根据结果再判断是否执行后面的语句

再看看switch的处理逻辑:

switch是在编译阶段就将判断条件和子函数地址逻辑绑定了,真正执行的时候,直接将test映射到对应的地址中就行了。
而且break的出现是为了解决当时goto 任意一行的问题的,代表本次逻辑结束
很明显,break的效率确实要比if好点,但再一想,也没有太本质的区别,无非就是提前加载么

switch优点:

1、代码整洁,相比if-else,但也好不到哪里去
2、执行效率快点,也是相比于if-else

switch缺点:

1、忘记写break,很容易造成bug
2、太多的break,感觉代码就很冗余,但不写又不行
3、局限的case判断条件

总结:

那么以现在计算能力,switch比if好的那点执行效率,完全可以忽略不记了,而且sun官方也指出对if进行过效率优化。
所以,switch的优点基本被缩小到没有了,而他的缺点却一直存在,而且基本每个java开发者都被switch坑过。
那么我们为什么还要继续用switch呢?

网友有一种说法,逻辑判断多于5次,就用switch,少于5次,就用if-else
或者另一种说法,5000次以上的逻辑判断,用switch执行比用if快将近一倍
对于这种说法,我是这样理解的,首先我们想想,大段大段的逻辑判断,是不是本身就有问题,
我们首先应该想到的是设计问题,为什么要出现这么多逻辑判断,能不能规避,而不是一开始就想用哪个能更快
而且,java是一个面向对象的语言,如果大段大段的逻辑判断,那不就是过于面向过程了么,这是不是又违背了java设计的初衷了呢

最后补充一点,我们还有设计模式,可以想办法替代掉这种大段的逻辑判断,详细可以去搜搜替代ifelse的方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

限流算法(漏桶算法、令牌桶算法)对比

限流算法(漏桶算法、令牌桶算法) 漏桶算法: 有个桶,比如最大能进2个单位的水(请求),桶底有个洞,每个单位的水都会在桶里待3秒后漏下去。 那么这个桶就可以同时处理2个单位的水。 如…

guns框架

分享一个框架guns https://gitee.com/naan1993/guns/ 这算是国内比较优秀的框架,简单的套路都有。 权限啊,代码自动生成啊等等 快速搭建一套后台管理项目 下面是作者介绍: Guns基于Spring Boot2,致力于做更简洁的后台管理系统。…

URLDecoder: Illegal hex characters in escape (%) pattern ...

URL中含有%,报错如下: URLDecoder: Illegal hex characters in escape (%) pattern … 解决: uriStr uriStr.replaceAll("%","%25"); 这种情况一般是出现在连接mongoDB数据库的时候,因为要把用户名密码写…

[设计模式] ------ 策略模式实战:java中替代if-else的大段逻辑

java中用策略模式替代if-else的大段逻辑 问题: java本来是一门以面向对象为主的语言,但很多人嘴上说着java面向对象,然后除了表映射实体之外,其他的还是面向过程的思路。 就比如今天要说的,代码中大段大段的if-else判…

mongodb 索引详解

使用springboot连接mongodb的时候,涉及到索引的使用 举例: Document(collection"book") //注释的是复合索引 //CompoundIndexes( // { // CompoundIndex(name "复合索引名字",def "{字段01:1,字段02:…

[转载] --- 让线程按顺序执行8种方法

看到一篇比较用心的总结,涉及到很多知识点,转来保存,而且我把里面的每个方法都试了一遍,亲测没问题 此次转载,还新增了一些说明和结构 我的总结: 其实,让线程按顺序执行,其实就是…

mongodb数据库,批量插入性能测试记录

spring boot 框架下,操作mongodb数据库 maven:spring-data-mongodb:2.1.3.RELEASE mongo数据库用的是本地的mongo,所以环境不一样,可能结果不一样。但趋势应该是一样的。 测试保证每次批量插入时,库里的数据量都是一…

[转载] --- 数据库基本知识

里面的很多点,我之前都总结过,但是感觉这篇把这些都连起来了,总结的挺好,转载保存一下 【从入门到入土】令人脱发的数据库底层设计前言 说到数据库这个词,我只能用爱恨交加这个词来形容它。两年前在自己还单纯懵懂的时…

java中使用lua脚本

第一步: windows下,先下载安装lua(其他操作系统自行百度,我只说主要基本的流程) 下载地址 我选了lua-5.3.4_Win64_bin.zip为例 第二步: 解压到D盘根路径的lua文件夹中 配置环境变量,增加D:\l…

java中使用lua操作redis

java中使用lua脚本参见我的上一篇文章 lua基础 本篇简单说下java中使用lua操作redis的示例&#xff0c;如下&#xff1a; 先引入jedis <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</…

spring-boot发送邮件失败 AuthenticationFailedException: 535 Authentication Failed

发送邮件失败&#xff0c;平时一直是好的&#xff0c;突然有天开始失败了&#xff0c;最后是发现邮箱密码失效了。。。 有的邮箱&#xff0c;需要定期更改密码。

windows本地项目开机自启动设置

记录下&#xff0c;本地项目开机自启动 vue项目 新建vue.bat文件 echo off :: nodejs安装目录下的nodevars.bat set nodevars "D:\Program Files\nodejs\nodevars.bat" :: 切换到D盘 d: :: 移动到需要启动的目录 cd D:\Users\curry.zhang\IdeaProjects\data-chec…

互联网广告行业(01)------ 初识了解DSP、SSP、ADX

最近有幸接触到公司的一个实时竞价系统&#xff0c;也算是公司的核心系统之一了&#xff0c;增加了很多新的知识&#xff0c;可能有点乱&#xff0c;先总结一波&#xff1a; 广告行业&#xff0c;先介绍概念 广告主&#xff1a;需要打广告的站点&#xff0c;一般就是卖东西的…

互联网广告行业(02)------OpenRTB(实时竞价)规范解读

RTB&#xff1a;(Real Time Bidding实时竞价)&#xff0c;RTB是一种广告交易的方式 OpenRTB&#xff1a;简单理解就是一个行业规范&#xff0c;是一个为了促进RTB方式广告的标准&#xff0c;有对应的api文档&#xff0c;大家都按照这个规范去传参数&#xff0c;那么发送方和接收…

[go]---从java到go(01)---基础与入门上手

为什么用go&#xff0c;就是为了快速响应并且高并发。 一样的逻辑&#xff0c;用java也能实现&#xff0c;但用go可能就比java快点。 如果你很熟练java了&#xff0c;那么学习go就会很快。 go的社区环境相比java没那么大&#xff0c;但一般问题都足够了。 go是谷歌出品&#xf…

[go]---从java到go(02)---一个简单的handler模式的实现

类似于责任链模式吧&#xff0c;不同类实现相同的入参&#xff0c;执行不同的操作&#xff0c;一个执行完再确定要不要执行下一个。 用go实现&#xff1a; 1.定义一个接口 后面所有的handler都要实现这个接口的handler方法 type IHandler interface {/**true 表示通过 false…

[数据库] --- clickhouse

clickhouse是一个列式数据库&#xff08;系统&#xff09;。 官方文档 官网比较全&#xff0c;但也可以说比较杂&#xff0c;下面就是我个人的一些总结&#xff0c;以及在实际工作中的应用场景。 1.clickhouse适用场景 clickhouse主要适合那种大量数据做分析的场景。 一般数据…

错误记录:expected single matching bean but found 2

springboot项目&#xff0c;之前有mysql数据源&#xff0c;现在又新增了clickhouse数据源&#xff0c;于是 新增了一个clickhouseDatasource的配置bean&#xff0c;如下&#xff1a; Beanpublic DataSource dataSource() throws PropertyVetoException {HikariConfig config …

消息队列(5):RocketMQ

介绍 RocketMQ是一款成熟的分布式消息中间件。 由阿里2012年开源&#xff0c;2017年成为Apache顶级项目。 源码是java写的。 高性能&#xff0c;低延迟&#xff0c;高可靠。历经多次双十一大促&#xff0c;整体很稳定。 RocketMQ对比其他mq的优势 对比kafka和Rabbitmq&#…

[错误记录] --- clickhouse报错Decimal value is too small

java操作clickhouse数据库&#xff0c;执行insert的时候&#xff0c;报错&#xff1a; Exception in thread "main" ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 69, host: xx.xx.xx.xxx, port: xxxx; Code: 69, e.displayText(…