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}
    
  • 相关阅读:
    云虚拟化
    yum puppet 并整合控制台
    Centos6.4 openNebula
    ubuntu Server LAmp环境
    openSuSE12.1 zypper LAMP
    yum puppet
    NYOJ 257 郁闷的C小加(一)
    JAVA_SE基础——17.方法的重载
    poj 1390 Blocks (经典区间dp 方块消除)
    HBase数据同步到ElasticSearch的方案
  • 原文地址:https://www.cnblogs.com/hoosway/p/3600595.html
Copyright © 2011-2022 走看看