栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

“ x为空”和“ x ==空”有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“ x为空”和“ x ==空”有什么区别?

更新: Roslyn编译器已更新,以在 没有重载的相等运算符时
使两个运算符的行为相同。请查看当前编译器结果(

M1
M2
代码)中的代码,该代码显示了没有重载的相等比较器时发生的情况。他们俩现在都表现得更好
==
。如果存在相等的比较器超载,则代码仍然不同。

有关较旧版本的Roslyn编译器,请参见以下分析。


因为

null
与使用C#6的习惯没有什么不同。但是,当您更改
null
为另一个常量时,事情变得很有趣。

以这个为例:

Test(1);public void Test(object o){    if (o is 1) Console.WriteLine("a");    else Console.WriteLine("b");}

测试合格

a
。如果将其与
o == (object)1
正常编写的内容进行比较,那确实会有所不同。
is
考虑比较另一侧的类型。太棒了!

我认为

== null
vs.
is null
常量模式只是“偶然”非常熟悉的事情,其中
is
运算符和equals运算符的语法产生相同的结果。


作为svick评论,

isnull
呼吁
System.Object::Equals(object,object)
地方
==
调用
ceq

IL

is

IL_0000: ldarg.1   // Load argument 1 onto the stackIL_0001: ldnull    // Push a null reference on the stackIL_0002: call bool [mscorlib]System.Object::Equals(object, object) // Call method indicated on the stack with argumentsIL_0007: ret       // Return from method, possibly with a value

IL

==

IL_0000: ldarg.1   // Load argument 1 onto the stackIL_0001: ldnull    // Push a null reference on the stackIL_0002: ceq       // Push 1 (of type int32) if value1 equals value2, else push 0IL_0004: ret       // Return from method, possibly with a value

既然我们在谈论

null
,就没有区别,因为这仅对实例有所不同。当重载了相等运算符时,这可能会改变。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号