zoukankan      html  css  js  c++  java
  • .NET中的字符串(3):字符串的比较

    在.NET中,对字符串的比较操作并不仅仅是简单的比较二者的值,= =操作首先比较两个字符串的引用,如果引用相同,就直接返回True;如果不同再去比较它们的值。所以如果两个值相同的字符串的比较相对于引用相同的字符串的比较要慢,中间多了一步判断引用是否相同。看下面这段代码:

    1using System;
    2
    3namespace Demo3
    4{
    5 /**//// <summary>
    6 /// String类型的比较
    7 /// </summary>
    8 public class Test
    9 {
    10 public static void Main(string[] args)
    11 {
    12 string a = "1234";
    13 string b = "1234";
    14 string c = "123";
    15 c += "4";
    16
    17 int times = 1000000000;
    18 int start,end;
    19 
    20 /**////测试引用相同所用的实际时间
    21 start = Environment.TickCount;
    22 for(int i=0;i<times;i++)
    23 {
    24 if(a==b)
    25 {}
    26 }
    27 end = Environment.TickCount;
    28 Console.WriteLine((end-start));
    29 
    30 /**////测试引用不同而值相同所用的实际时间
    31 start = Environment.TickCount;
    32 for(int i=0;i<times;i++)
    33 {
    34 if(a==c)
    35 {}
    36 }
    37 end = Environment.TickCount;
    38 Console.WriteLine((end-start));
    39
    40 Console.ReadLine();
    41 }
    42 }
    43}
    44
    执行的结果(运行的结果可能有些不同):
    
    1671
    
    4172
    

    由此我们看出值相同时的比较用= =比引用相同时的比较慢了好多。这里仅仅是一个测试,因为做这样的比较并没有任何实际的意义。
    有一点需要明确的是,.NET中==跟Equals()内部机制完全是一样的,==是它的一个重载。

    1public static bool operator ==(string a, string b)
    2{
    3 return string.Equals(a, b);
    4}
    5
    1public static bool Equals(string a, string b)
    2{
    3 if (a == b)
    4 {
    5 return true;
    6 }
    7 if ((a != null) && (b != null))
    8 {
    9 return a.Equals(b);
    10 }
    11 return false;
    12}
    
  • 相关阅读:
    利用哈希map快速判断两个数组的交集
    TCP协议中的三次握手和四次挥手(图解)-转
    PC,移动端H5实现实现小球加入购物车效果
    HQL和SQL的区别
    Java泛型详解,通俗易懂只需5分钟
    经典的 Fork 炸弹解析
    Java并发之AQS详解
    Java不可重入锁和可重入锁的简单理解
    Codeforces 1215F. Radio Stations
    Codeforces 1215E. Marbles
  • 原文地址:https://www.cnblogs.com/hoosway/p/3600595.html
Copyright © 2011-2022 走看看