C# 中的运算符 ==、相等方法和 Object.ReferenceEqual
Operator ==, Equal Method and Object.ReferenceEqual in C#
今天,我正在阅读有关 == 运算符、Equal 函数和 Object.ReferenceEqual 方法的内容。
- 运算符== 用于检查相等引用。
- 相等方法 - 用于检查相等的值。
- Object.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 作为 == 运算符检查引用。
第 2 行 - 输出为假。
问题1.对象的相等函数校验值。在这里我们有相同的价值,但我得到了 False。为什么?
第 3 行 – 输出为真。
问题2,这里我在做casting,所以我get True了。为什么?
第 4 行。输出为 False。
据我所知,这两个对象是不同类型的。所以,我得到了 FALSE。
第 5 行。输出为 False。
问题3,我在做casting,还是报False。为什么?
问题4.==运算符和Object.ReferenceEqual有什么区别?
问题一:
只有 return 如果类型是 Int32 才为真,但它是一个字符串
https://msdn.microsoft.com/en-us/library/de3wwa8z(v=vs.110).aspx
问题二:
string.Equals return 如果值相同则为真,在两种情况下都是:“5”。
https://msdn.microsoft.com/en-us/library/system.string.equals(v=vs.110).aspx
问题三:
它们指向不同的对象,因此 ReferenceEqual returns false
https://msdn.microsoft.com/nl-nl/library/system.object.referenceequals(v=vs.110).aspx
问题四:
== 与 referenceequal 相同,除了 string。但是 == 运算符可以被重载,所以如果你想测试身份,使用 ReferenceEquals
https://msdn.microsoft.com/nl-nl/library/6a71f45d.aspx
Equal function check value of the object. Here we have same value, but I am getting False. WHY?
不同类型的对象不可能具有相同的值。第一个对象的整数值为 5,而第二个对象的字符串值为 "5"
。字符串 "5"
是整数值 5 的可能 表示形式 之一 - 即它的十进制表示形式。但是,它不是相同的值。毕竟,您不会期望 "101"
等于 5,即使 101 是 5 的二进制表示。
Here I am doing casting, so I am getting True. WHY?
您没有进行转换,您正在将 5 转换为其十进制字符串表示形式,即 "5"
。
Here I am doing casting, but still I am getting False. WHY?
因为你得到的是一个内容相同的不同对象(即一个包含字符"5"
的字符串)。
What is difference between ==
Operator and Object.ReferenceEqual
?
Object.ReferenceEqual
忽略运算符 ==
.
可能的重载
请从这些陈述中清醒过来:
Operator == It is used for check equal references.
Equal Method - It is used for check equal values.
operator==
和 Equals
都可以被覆盖以修改它们的行为。由于 operator==
不是虚拟的,因此在编译时知道选择了哪种方法,但在运行时根据对象类型选择 Equals
。 (选择合适方法的整个过程称为方法解析)
第 1 行:正确。因为 string.operator==
已由编译器选择,它比较字符串而不是它们的引用。
第 2 行:错误。因为 int.Equals(object)
是由编译器选择的,而 object
(strValue
) 是一个字符串而不是 int
。 int
不等于 string
所以它是错误的。
第 3 行:正确。因为 string.Equals(string)
是由编译器选择的,它检查值的相等性而不是引用。
第 4 行:错误。因为 object.ReferenceEquals
检查引用相等性所以答案很明显。
第 5 行:错误。同上。 intValue.ToString()
在内存中创建一个值为“5”的新字符串对象,它与 strValue
指向的对象不同,因此答案为假。
今天,我正在阅读有关 == 运算符、Equal 函数和 Object.ReferenceEqual 方法的内容。
- 运算符== 用于检查相等引用。
- 相等方法 - 用于检查相等的值。
- Object.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 作为 == 运算符检查引用。
第 2 行 - 输出为假。
问题1.对象的相等函数校验值。在这里我们有相同的价值,但我得到了 False。为什么?
第 3 行 – 输出为真。
问题2,这里我在做casting,所以我get True了。为什么?
第 4 行。输出为 False。
据我所知,这两个对象是不同类型的。所以,我得到了 FALSE。
第 5 行。输出为 False。
问题3,我在做casting,还是报False。为什么?
问题4.==运算符和Object.ReferenceEqual有什么区别?
问题一: 只有 return 如果类型是 Int32 才为真,但它是一个字符串 https://msdn.microsoft.com/en-us/library/de3wwa8z(v=vs.110).aspx
问题二: string.Equals return 如果值相同则为真,在两种情况下都是:“5”。 https://msdn.microsoft.com/en-us/library/system.string.equals(v=vs.110).aspx
问题三: 它们指向不同的对象,因此 ReferenceEqual returns false https://msdn.microsoft.com/nl-nl/library/system.object.referenceequals(v=vs.110).aspx
问题四: == 与 referenceequal 相同,除了 string。但是 == 运算符可以被重载,所以如果你想测试身份,使用 ReferenceEquals https://msdn.microsoft.com/nl-nl/library/6a71f45d.aspx
Equal function check value of the object. Here we have same value, but I am getting False. WHY?
不同类型的对象不可能具有相同的值。第一个对象的整数值为 5,而第二个对象的字符串值为 "5"
。字符串 "5"
是整数值 5 的可能 表示形式 之一 - 即它的十进制表示形式。但是,它不是相同的值。毕竟,您不会期望 "101"
等于 5,即使 101 是 5 的二进制表示。
Here I am doing casting, so I am getting True. WHY?
您没有进行转换,您正在将 5 转换为其十进制字符串表示形式,即 "5"
。
Here I am doing casting, but still I am getting False. WHY?
因为你得到的是一个内容相同的不同对象(即一个包含字符"5"
的字符串)。
What is difference between
==
Operator andObject.ReferenceEqual
?
Object.ReferenceEqual
忽略运算符 ==
.
请从这些陈述中清醒过来:
Operator == It is used for check equal references.
Equal Method - It is used for check equal values.
operator==
和 Equals
都可以被覆盖以修改它们的行为。由于 operator==
不是虚拟的,因此在编译时知道选择了哪种方法,但在运行时根据对象类型选择 Equals
。 (选择合适方法的整个过程称为方法解析)
第 1 行:正确。因为 string.operator==
已由编译器选择,它比较字符串而不是它们的引用。
第 2 行:错误。因为 int.Equals(object)
是由编译器选择的,而 object
(strValue
) 是一个字符串而不是 int
。 int
不等于 string
所以它是错误的。
第 3 行:正确。因为 string.Equals(string)
是由编译器选择的,它检查值的相等性而不是引用。
第 4 行:错误。因为 object.ReferenceEquals
检查引用相等性所以答案很明显。
第 5 行:错误。同上。 intValue.ToString()
在内存中创建一个值为“5”的新字符串对象,它与 strValue
指向的对象不同,因此答案为假。