操作符==,方法和对象相等.c#中的ReferenceEqual
本文关键字:ReferenceEqual 中的 对象 方法 操作符 | 更新日期: 2023-09-27 17:53:57
今天,我正在阅读==操作符,相等函数和对象。ReferenceEqual方法。
- Operator ==用于检查引用是否相等。
- Equal Method -用于检查相等的值。
- 对象。ReferencEqual -用于检查引用是否相等。
class Program
{
static void Main(string[] args)
{
int intValue = 5;
string strValue = "5";
Console.WriteLine(string.Format("{0} ", intValue.ToString() == strValue));// Output is TRUE
Console.WriteLine(string.Format("{0} ", intValue.Equals(strValue))); // Output is FALSE
Console.WriteLine(string.Format("{0} ", intValue.ToString().Equals(strValue))); // Output is TRUE
Console.WriteLine(string.Format("{0} ", object.ReferenceEquals(intValue, strValue)));// Output is FALSE
Console.WriteLine(string.Format("{0} ", object.ReferenceEquals(intValue.ToString(), strValue)));// Output is FALSE
Console.Read();
}
我在输出中有五行。
第1行-输出为True。
据我所知,我在这里做铸造。所以我得到TRUE ==操作符检查引用。
第2行-输出为False。
问题1。对象的函数检查值相等。这里我们有相同的值,但我得到假。为什么?
第3行-输出为True。
问题2。这里我在选角,所以我得到True。为什么?
4号线。输出为False。
据我所知,这两个对象是不同类型的。所以,我得到的是FALSE
第5行。输出为False
问题3。这里我正在做铸造,但我仍然得到假。为什么?
问题4。== Operator和Object.ReferenceEqual的区别是什么?
请不要再想这些话了:
Operator ==用于检查引用是否相等。
相等方法-用于检查相等的值。
可以覆盖operator==
和Equals
来修改它们的行为。由于operator==
不是虚拟的,所以在编译时就知道选择了哪个方法,而Equals
是在运行时根据对象类型选择的。(选择合适方法的整个过程称为方法解析)
第一行:True。因为string.operator==
是由编译器选择的,它比较的是字符串而不是它们的引用。
第二行:False。因为int.Equals(object)
是由编译器选择的,而object
(strValue
)是字符串而不是int
。int
不等于string
,所以为假。
第三行:True。因为string.Equals(string)
是由编译器选择的,它检查值的相等性,而不是引用。
第四行:False。因为object.ReferenceEquals
检查引用是否相等,所以答案是显而易见的。
第5行:False同上。intValue.ToString()
在内存中创建一个值为"5"的新字符串对象,它与strValue
指向的对象不同,因此答案为假。
不同类型的对象不可能具有相同的值。第一个对象的整数值为5,而第二个对象的字符串值为对象的相等功能检查值。这里我们有相同的值,但我得到假。为什么?
"5"
。字符串"5"
是整数值5的一种可能的表示,即它的十进制表示。然而,它不是相同的值。毕竟,您不会期望"101"
等于5,即使101是5的二进制表示。
这里我在做casting,所以我得到True。为什么?
你不是在进行类型转换,你是在将5转换为它的十进制字符串表示形式,即"5"
。
这里我正在做铸造,但我仍然得到假。为什么?
因为您得到了具有相同内容的不同对象(即单个字符串,其中包含字符"5"
)。
==
和Object.ReferenceEqual
的区别是什么?
Object.ReferenceEqual
忽略操作符==
可能的重载。
问题2:字符串。如果值相同,Equals返回true,在两种情况下都是:"5"。https://msdn.microsoft.com/en-us/library/system.string.equals (v = vs.110) . aspx
问题3:它们指向不同的对象,因此ReferenceEqual返回falsehttps://msdn.microsoft.com/nl-nl/library/system.object.referenceequals (v = vs.110) . aspx
问题4:==与referenceequal相同,除了string。但是==操作符可以被重载,所以如果您想测试身份,请使用ReferenceEqualshttps://msdn.microsoft.com/nl-nl/library/6a71f45d.aspx