开门见山,首先看下面代码,你认为结果分别是什么? string str = string.Empty; string str1 = ""; string str2 = null; bool t = string.IsNullOrEmpty(str); bool t1 = string.IsNullOrEmpty(str1); bool t2 = string.IsNullOrEmpty(str2); 输出结果告诉我们。都是true。是不是很郁闷,怎么都是true。难道就没区别吗? 这三种赋值的写法。想必敲过代码的都写过。纠结之余我在网上整理到如下知识。分享于此 网络上说:string.Empty就相当于"", 但这里说的是“相当于”,不是“等于” 很显然上面都是赋值,但如果这样写,会报错,同时也验证了使用前必须先初始化也就是赋值。 string str1; bool t1 = string.IsNullOrEmpty(str1); Console.WriteLine(str1); 既然从赋值判断是相等的。那不同之处在哪里?难道在分配内存空间上? 最常见的一个面试题就是:string str=""和string str=null有什么区别,这个大家应该都不陌生。回答都是:前者分配内存为空字符串的空间,也就是长度为空;但后者根本就不分配空间。所以从效率上来讲后者是不是划算? 可网上有的说string str=string.Empty也不分配内存空间,开头说了,Empty相当于"",但现在Empty跟null一样都是不分配内存空间,怎么又变成一家亲了。 网络还有这么一句话:为了以后跨平台,使用string.Empty。额。""和null不跨平台吗? 以下也是在网络找到的解释: String.Empty和Null,这两个都是表示空字符串 string str1= String.Empty,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串, 只不过这个字符串的值为空,在内存中是有准确的指向的 string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错。textBox1.Text的值为零长度字符串 ""。 判定为空字符串的几种写法,按照性能从高到低的顺序是: s.Length == 0 优于 s == string.Empty 优于 s == "" 判断字符串是否为空最好的方法就是 s.Length==0 !
紧接着我还找到个有趣的实验: 一个外国人做了一个测试,测试的对象有5种,谁的效率更高: s == "" s == string.empty s.equals(”") s.equals(string.empty) s.length == 0 测试代码见:http://www./diannao/dn87571/ 测试结果: 最后得到测试的结果如下:
[s == ""] 空字符串, 10315.6250 毫秒 短字符串, 8307.8125 毫秒 长字符串, 8564.0625 毫秒 [s == string.empty] 空字符串, 3573.4375 毫秒 短字符串,8307.8125 毫秒 长字符串, 8603.1250 毫秒 [s.equals("")] 空字符串, 9517.1875 毫秒 短字符串, 7537.5000 毫秒 长字符串, 7576.5625 毫秒 [s.equals(string.empty)] 空字符串, 9540.6250 毫秒 短字符串, 7515.6250 毫秒 长字符串, 7607.8125 毫秒 [s.length == 0] 空字符串, 443.7500 毫秒 短字符串, 443.7500 毫秒 长字符串, 445.3125 毫秒 很明显用字符串的length属性是最快的。 得到以下结论: 在2.0中判断字符串是否为空(包含null的情况)用string.isnullorempty(str); 路过的高手进来讨论下,大家友好积极的发言,这三者到底啥区别,是不是正如以上这些解释。谢谢!
|
|
来自: 昵称10504424 > 《C#》