让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较

重构背景及原因

  最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势。考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提高效率,同时也能培养阶梯人才。各个小分队为了“统一”代码风格,提高成员的代码能力以便最终能提高项目代码质量,减少以后的维护成本,最终决定“每日”进行小组内的代码走查/审查(Code Review),然后进行代码重构。

直接比较与非比较:我所谓的直接比较与非比较是指"=="判断方式与"!="判断方式,如以下代码

 1  public static void 直接判断()
 2         {
 3             Stopwatch timer = new Stopwatch();
 4             timer.Start();
 5
 6             string str = "测试字符串";
 7             for (int i = 0; i < 10; i++)
 8             {
 9                 Stopwatch timer2 = new Stopwatch();
10                 timer2.Start();
11                 for (int j = 0; j < 10000000; j++)
12                 {
13                     if ("测试字符串" == str)
14                     {
15                     }
16                 }
17                 timer2.Stop();
18                 Console.WriteLine("直接判断第" + i + "次耗时:" + (timer2.ElapsedMilliseconds));
19
20             }
21             timer.Stop();
22             Console.WriteLine("直接判断平均耗时:" + (timer.ElapsedMilliseconds * 1.0 / 10));
23
24         }
25
26         public static void 非判断()
27         {
28             Stopwatch timer = new Stopwatch();
29             timer.Start();
30
31             string str = "测试字符串";
32             for (int i = 0; i < 10; i++)
33             {
34                 Stopwatch timer2 = new Stopwatch();
35                 timer2.Start();
36                 for (int j = 0; j < 10000000; j++)
37                 {
38                     if ("测试字符串" != str)
39                     {
40
41
42                     }
43                 }
44                 timer2.Stop();
45                 Console.WriteLine("非判断第" + i + "次耗时:" + (timer2.ElapsedMilliseconds));
46
47             }
48             timer.Stop();
49             Console.WriteLine("非判断平均耗时:" + (timer.ElapsedMilliseconds * 1.0 / 10));
50
51         }

  看到这里时有的朋友会说这有什么好说的呀,这又没什么影响,效果不一样么?那么我们看下以上代码执行结果吧,执行结果如下图:

  看到这张图时,可能有些朋友就笑了说,这差别也“忒大了”吧,10000000次才相差2.6毫秒呀,这有意思么?还好意思在这儿写。只是我觉得既然有性能上的差异的话,我们为什么不用好的哪一个呢?

  在此感谢园友“小彬”指出string.Equals的性能更好,然后经过我的测试,测试结果如下:

耗时情况: string.Equals< == <  !=

总结:在做字符串比较判断是优先考虑  string.Equals 。

  还是那句话,如果我们在写代码的时候就考虑到了这些我们还需要再花时间做此种重构么?代码重构怎能不渐行渐远呢?

以下是系列文章链接:

让代码重构渐行渐远系列(1)——解除多层嵌套

让代码重构渐行渐远系列(2)——降低代码重复度

让代码重构渐行渐远系列(3)——直接比较取代非比较

时间: 2024-10-12 19:36:32

让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较的相关文章

让代码重构渐行渐远系列(2)——降低代码重复度

降低代码重复度:我所谓的代码重复指的不仅仅是多行一模一样的代码,同时也包括一些重复复制或是没必要的一些代码,如以下下代码: 1 public void 重复代码示例(int? 参数一) 2 { 3 if (参数一 != null) 4 { 5 //处理代码.... 6 } 7 else 8 { 9 参数一 = null; 10 //处理代码..... 11 } 12 13 //处理代码..... 14 15 } 可能有的朋友在第一眼看到这段代码时会说,这个没什么问题啊 ,哪有什么重复呀?真的就没

让代码重构渐行渐远系列(1)——解除多层嵌套

重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提高效率,同时也能培养阶梯人才.各个小分队为了“统一”代码风格,提高成员的代码能力以便最终能提高项目代码质量,减少以后的维护成本,最终决定“每日”进行小组内的代码走查/审查(Code Review),然后进行代码重构. 解除多层嵌套:我所谓的多层嵌套是指的如下代码: 1 public bool 多层嵌

C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)

一.空操作符(??)在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值.通常我们会这样来处理: 1.string name = value; if (name == null) { name = string.Empty; } 2.使用三元操作符(? :)对上面对吗进行优化: string name = value == null ? string.Empty : value; 上面的两种方式 的代码不够简洁,?? 操作符来进行进一步优化,?? 操作符意

Java中String.equals()方法的实现代码

java中String类里的String.equals()方法: 源代码: public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { return true; } //如果传递进来的参数是String类的实例 if (anObject instanceof String) { String anotherString = (String)anObject; int n = count;//字符串长度 i

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦

前言 自从此博客发表以及代码开源以来,得到了许多人的关注.也没许多吧,反正在我意料之外的.包括几位大牛帮我做订阅号推广,真的很感谢他们.另外,还有几个高手给我提了一些架构上的问题.其实本身这个项目是没有做什么架构设计的.只是简单分了分层.不过我在经过仔细思考之后决定对项目架构做些调整,当然在我的技术范围之内,我相信还会有第二次,第三次甚至更多重构,我希望把他变得更加完美. 重构思路 对于重构思路,我首先想到的是,让程序能够支持多种数据库,比如我现在用的是SQLServer,而好多朋友用MySQL

【小白的java成长系列】——String类的深入分析(基于源码)

接着前面面向对象来说吧~今天来说说String类..其实String类也包含很多面向对象的知识的~ 首先来问一个问题:我们在开发过程中,如果要使用一个类的话,就要创建对象,这句话没什么问题吧~在实际开发的时候确实是这样的,只有创建了对象才能真正的去使用一个普通的类,我们一般创建对象,几乎所有的类创建对象都是要通过new关键字来创建的~ 问题就来了..为什么我们的String可以直接写成String str = "abc";这样子呢? 当然String类也可以通过new来创建对象的...

[代码重构]简化函数调用

在对象技术中,最重要的概念莫过于“接口”,容易被理解和被使用的接口是开发良好面向对象软件的关键.本章介绍的重构手法是用来使接口变得更简洁易用的. 简化函数调用 1. 重构手法 1.1 函数改名 概要: 函数的名称未能揭示函数的用途. 修改函数名称. 动机: a. 让函数名称准确表达它的用途 示例: 重构前: public String getTelephoneNumber() { return mOfficeAreaCode + "-" +mOfficeNumber; } 重构后: /

05_动手动脑之String.equals()方法

Question: 请查看String.equals()方法的实现代码,注意学习其实现方法. Answer: java中的String.equals()方法的实现代码: equals()法是根类Object中的方法.源代码如下: public boolean equals(Object obj){return (this == obj);} 可见默认的equals方法,直接调用==,比较对象地址. 不同的子类,可以重写此方法,进行两个对象的equals的判断.String类源码中重写的equal

CSS代码重构

CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS代码重构主要有两个目的:1.提高代码性能2.提高代码的可维护性 提高代码性能 提高CSS代码性能主要有两个点:1.提高页面的加载性能提高页面的加载性能,简单说就是减小CSS文件的大小,提高页面的加载速度,尽可以的利用http缓存2.提高CSS代码性能不同的CSS代码,浏览器对其解析的速度也是不一样的,如何提高浏览器解析CSS代码的速度也是我们要考虑的 提高代码的可维护性 提高CS