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

问题来自于对控件的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

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值