首先观察如下两个程序,想想他们是否有区别:
Part one:
int length = myString.length;
for(int i=0 ; i<length ; i++)
{
//perform some operation
}
Part two:
for(int i=0 ; i<myString.length ; i++)
{
//perform some operation
}
上述两程序的主要区别是myString的长度计算放在循环内还是循环外的区别。
第一种情况,myString的长度被计算了一次。
第二种情况,myString的长度被计算了length次。
实际上,还不止是上述这么点次数的区别。
编程语言通常使用两种方法记录字符串的长度:
一,字符串在开始处存储字符串的长度;
二,字符串在末尾以一个特殊字符标志结束。
在C#中,是应用第二种方法来标志字符串长度的。所以,每次计算字符串的长度,都要遍历字符串到最后的那个特殊字符。于是,针对上述的两个程序。
第一个程序的复杂度为length(字符串的长度);
第二个程序的复杂度为length * length。
这就是区别。。。。。