笔记01
1:== 和 equals比较
对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false。
对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true。
对于 string 类型,== 比较字符串的值。
==操作比较的是两个变量的值是否相等。
equals()方法比较的是两个对象的内容是否一致.属性什么的
==也就是比较引用类型是否是对同一个对象的引用。
2:
String.Empty、string=”” 和null的区别
String.Empty是string类的一个静态常量;
String.Empty和string=””区别不大,因为String.Empty的内部实现是:
1
2
3
4
5
6
7
8
9
10
11
12
|
public static readonly string Empty; //这就是String.Empty 那是只读的String类的成员,也是string的变量的默认值是什么呢? //String的构造函数 static String(){ Empty = "" ; //Empty就是他"" WhitespaceChars = new char [] { '\t' , '\n' , '\v' , '\f' , '\r' , ' ' , '\x0085' , '\x00a0' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , '' , '\u2028' , '\u2029' , ' ' , '' }; } |
再看一段代码:
1
2
3
4
5
6
7
8
|
string s1 = "" ; string s2 = string .Empty; if (s1 == s2)<br>{ Console.WriteLine( "一模一样!" ); } // 结果都是True Console.WriteLine( "" .Equals( string .Empty)); Console.WriteLine( object .ReferenceEquals( string .Empty, "" )); |
既然String.Empty和string=””一样,同样需要占用内存空间,为什么推荐优先使用String.Empty ?
string.Empty只是让代码好读,防止代码产生歧义,比如说:
string s = ""; string s = " "; 这个不细心看,很难看出是空字符串还是空格字符。
如果判断一个字符串是否是空串,使用
if(s==String.Empty)和if(s==””)的效率是一样的,但是最高效的写法是if(s.Length==0)
string.IsNullOrEmpty的内部实现方式:
public static bool IsNullOrEmpty( string value)<br>{<br> if (value != null ) { return (value.Length == 0); } return true ; } |