C# ==是Equal()方法的快捷方式吗?

C# ==是Equal()方法的快捷方式吗?,c#,java,equals,C#,Java,Equals,在Java语言中,我认为当您进行类似Object1==Object2默认情况下,它比较对象的Hashcode,除非重写equal()方法,因为=比较器是equal方法的一种快捷方式。 如果我错了,请纠正我 问题是,在C#中是否相同?当您将对象与==进行比较时,它会比较引用(它们是否指向同一对象)=绝对不是equals的快捷方式 在C#中,==做同样的事情,但有一个重要的区别——在C#中,可能重载==,因此可能为操作符定义新的含义。例如,字符串的==比较字符串与另一个字符串的内容。默认情况下,运算

在Java语言中,我认为当您进行类似
Object1==Object2
默认情况下,它比较对象的Hashcode,除非重写equal()方法,因为
=
比较器是equal方法的一种快捷方式。 如果我错了,请纠正我


问题是,在C#中是否相同?

当您将对象与==进行比较时,它会比较引用(它们是否指向同一对象)
=
绝对不是equals的快捷方式


在C#中,==做同样的事情,但有一个重要的区别——在C#中,可能重载==,因此可能为操作符定义新的含义。例如,字符串的==比较字符串与另一个字符串的内容。

默认情况下,运算符==通过确定两个引用是否指示相同的对象来测试引用相等性,因此引用类型不需要实现运算符==以获得此功能。当类型是不可变的,这意味着实例中包含的数据无法更改时,重载运算符==以比较值相等而不是引用相等可能会很有用,因为作为不可变对象,只要它们具有相同的值,就可以认为它们是相同的。不建议在非不可变类型中重写运算符==

Equals是一个虚拟方法,允许任何类重写其实现。表示一个值的任何类(本质上是任何值类型)或作为一个组的一组值,如复数类,都应该重写Equals。如果类型实现了IComparable,它应该重写Equals。

否,它不同。 如果两个引用都指向同一对象,则obj1==obj2为真。但例如,如果这两个字符串对象包含相同的内容,则为false

例如:

object obj1 = new Something(123);  
object obj2 = new Something(123);

=> obj1 != obj2
在Java和C#中,==运算符用于比较引用,而Equals()方法用于比较值。

在C#中,
==
从不直接调用
x.Equals(y)
(除非可能包括
string.Equals(x,y)
):

  • 对于某些内置类型,将执行直接比较(
    int
    s等具有操作码)
  • 如果定义了显式的
    =
    运算符,则调用该运算符
  • 对于
    可为null的
    ,应用“提升”规则,然后
    =
    应用于值(如果两者均为非null)
  • 对于类,默认值为引用相等
  • 对于结构,没有默认的
    ==
    实现

我认为它在C#中非常相似……我的问题是,它在C#中是一样的吗?我过分强调重复:那就是java;这是c#;不同的规则(java缺少操作符、null-t和structs,所有这些都涉及到这个故事)是一个字符串;它是internedNo,String是一个例外,我们处理它就像处理一个值类型一样,所以如果(str1==str2)是的,它会。ups,不知道这一点。将调整示例。==不只是检查引用;它比这更复杂。为此使用ReferenceEquals