字符串的比较

在.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}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值