C#中null和空的区别,==和Equals()方法的区别

来源:互联网 发布:淘宝客助手有手机版吗 编辑:程序博客网 时间:2024/05/08 04:48

问题来自于对控件的Text属性理解错误。

一:null和空的区别

1.声明的string类型的变量和属性以及字段在未赋值的情况下均为null,这个null不仅仅表示为无字符,更表示为空的引用。

比如:string userName;此时判断userName是否为空应该是if(userName==null)而不是if(userName==“”),并且使用userName.Equals(null)或userName.Equals(“”)均为错的,因为此时userName是个空引用,根本无法调用Equals()方法。但是如果声明为string userName=“”,则上述方法均成立。但是此时userName并不是null而是空值。

2.所有控件的Text属性的在未赋值的情况下是空值(""), 而不是null。

 

二:==和Equals()的区别

在此之前先说说内存的分类(从编程角度来说)

1)静态内存:存放静态变量,在整个程序运行期一直存在,空间中的值可以改变,但不用另辟空间(针对一个变量指向的静态空间)。类中的静态成员只能通过类名来访问,而不能通过对象和this来访问。非静态的可以访问静态的,但静态的不能访问非静态的,只能访问静态的。

2)寄存器:暂时未理解。

3)堆内存:实例(即使用new关键字创建的实例)

4)栈内存:局部变量、临时变量、值类型变量,地址(引用:4个字节)

值类型的变量放在堆中,而引用放在栈中,期实例放在堆中。==是进行值比教,而Equals()是进行引用比较。

例子:

例子1:

            string user1 = "tiger";
            string user2 = "tiger";
            Console.WriteLine((user1==user2));//打印true
            Console.WriteLine((user1.Equals(user2)));//打印true

例子2:


            string[] user1 ={"user1","user2"};
           
            string[] user2={"user1","user2"};
            Console.WriteLine((user1==user2));//false
            Console.WriteLine((user1.Equals(user2)));//false