【发布时间】:2023-11-03 07:29:01
【问题描述】:
今天,我正在阅读有关 == 运算符、Equal 函数和 Object.ReferenceEqual 方法的内容。
- 运算符 == 用于检查相等引用。
- 相等方法 - 用于检查相等值。
- Object.ReferenceEqual – 用于检查相等引用。
我创建了一个测试控制台应用程序。我有几个问题。如果你把所有的答案都给我,对我会有帮助。
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 行 – 输出为 False。
问题1. 对象的相等函数校验值。在这里,我们有相同的价值,但我得到了 False。为什么?
第 3 行 - 输出为真。
问题 2。我在这里进行铸造,所以我得到了 True。为什么?
第 4 行。输出为 False。
据我所知,这两个对象都是不同的类型。所以,我得到了 FALSE。
第 5 行。输出为 False。
问题 3。我在这里进行投射,但我仍然得到 False。为什么?
问题 4. == Operator 和 Object.ReferenceEqual 有什么区别?
【问题讨论】:
-
运算符 == 已在字符串上重载,并比较它们的值而不是它们的引用。
-
您的问题是关于强制转换,但您的示例代码中绝对没有显示强制转换。
-
请先阅读Object.Equals 文档。 “当前实例与obj参数比较的类型取决于当前实例是引用类型还是值类型。”。所以“它用于检查相等值”是不正确的。
标签: c# .net equality equals-operator referenceequals