C#中string.Empty和""、null的区别

  

  string.Empty是string类的一个静态常量,而""则表示一个空字符串。

  string是一种特殊的引用类型,它的null值则表示没有分配内存。

  使用ILSpy反编译String类,可以看到string.Equalus方法重写了Object的Equalus()方法:先比较引用,再比较字符串的内容,地址相同,值必相同。

 1     // 重写Object方法
 2     [__DynamicallyInvokable, ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
 3         public override bool Equals(object obj)
 4         {
 5             if (this == null)
 6             {
 7                 throw new NullReferenceException();
 8             }
 9             string text = obj as string;
10             return text != null && (this == obj || (this.Length == text.Length && string.EqualsHelper(this, text)));
11         }
12     // 重载Equals
13        [__DynamicallyInvokable, ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
14         public bool Equals(string value)
15         {
16             if (this == null)
17             {
18                 throw new NullReferenceException();
19             }
20             return value != null && (this == value || (this.Length == value.Length && string.EqualsHelper(this, value)));
21         }

  string.Empty和空字符串比较结果:

 1      static void Main(string[] args)
 2         {
 3             String emptyString = "";
 4
 5             // True
 6             Console.WriteLine(emptyString == String.Empty);
 7
 8             // True
 9             Console.WriteLine(emptyString.Equals(string.Empty));
10         }
时间: 2024-11-10 00:15:55

C#中string.Empty和""、null的区别的相关文章

string.empty和null的区别

关于String.Empty和Null的问题是这样的,这两个都是表示空字符串,其中有一个重点是string str1= String.Empty和 string str2=null 的区别,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的,string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错. 当你只定义一个str而不为其分配内存时用st

C# 中 string.Empty、""、null的区别

原文C# 中 string.Empty."".null的区别 一.string.Empty 和 "" 1.Empty是string类中的一个静态的只读字段,它是这样定义的: // Represents the empty string. This field is read-only. public static readonly string Empty; 也就是说 string.Empty 的内部实现是等于 "" 的.二者在优化方面稍有差别,

C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别

C#中的空值的判断较麻烦,不象在VB6中那么简单,这些各种空值的判断和理解对不熟悉的人来说,可能很麻烦,现就我在使用过程中的一点体会和大家共同分享. (1)NULL null 关键字是表示不引用任何对象的空引用的文字值.null 是引用类型变量的默认值.那么也只有引用型的变量可以为NULL,如果 int i=null,的话,是不可以的,因为Int是值类型的. (2)DBNULL DBNull在DotNet是单独的一个类型,该类只能存在唯一的实例,DBNULL.Value,DBNull唯一作用是

C#中String.Empty,“”,NULL的区别

一.String.Empty String类的静态只读字段.定义如下: public static readonly string Empty; 二.“” 被赋值为“”的字符串变量,会在栈上保存一个地址(占4个字节),该地址会指向 同时在堆上分配一个长度为0的内存空间(存放字符串的值). 三.null 被赋值为null的变量,会在栈上保存一个地址(占4个字节),该地址不会指向堆上的任何内存空间(1.初始赋值时不分配内存:2.将原来所指的内存空间变为不可达). 总结: 1.String.Empty

java中String、stringbuilder、stringbuffer区别

1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.每次对String对象进行改变的时候其实都等同于生成了一个新的String对象,然后将引用指向新的String对象,原String对象GC回收. Private final char value[]; StringBuider与stringbuffer都继承自AbstractStringBuider类,在abstractstringbuilder中也是

Java 中String和new 创建对象的区别

我个人的理解String x="bv";这个是在栈中创建的,栈中的数据具有不可更改性,就是说你再创建一个String y="bv";它会先在栈中寻找字面值为bv的地址,如果存在这样的地址就指向它(否则就在栈中新开辟一个字面值为bv的内存地址) 因此这儿x==y 因为他们指向同一块内存地址 无论== equals结果都是true String v=new String("bv"); 通过new的方式在堆创建一个对象,new是在堆中开辟一个新的处女地

JS中的Undefined和Null的区别

Undefined ①在声明变量时,如果没有给变量赋值,则这个变量就是undefined类型: ②访问未声明的变量会报错误消息,但这样的变量使用 typeof 测试,返回的值为Undefined. 即未声明变量和未赋值变量的类型为Undefined类型 Null 空值,只有一个值就是null,任何变量只要给其赋值为null的话,这个变量的数据类型就是Null类型 值得注意的是:typeof null 的返回值为 object. 两者区别: null已定义,并初始化为null:undefined未

java中String与StringBuffer拼接的区别

学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: StringBuffer能够拼接所有的类型的值. public class Test { public static void main(String[] args) { String str1="abc"; String str2="cba"; //使用Stirng的c

javascript中String 对象slice 和substring 区别

1.slice(start,stop)和substring(start,stop)  方法都是用于提取字符串中从start开始到stop-1间的字符(因为字符串索引是从0开始).其中 start必选,stop可选. 2.现在主要讲两者间的不同之处 substring(start,stop): 1. 当start等于stop时 返回空字符串. 2.stop可选:如果省略该参数,那么返回的子串会一直到字符串的结尾. 3.如果start>stop,substring 会交换着两个参数,即从end参数开