C# ==是Equal()方法的快捷方式吗?
在Java语言中,我认为当您进行类似C# ==是Equal()方法的快捷方式吗?,c#,java,equals,C#,Java,Equals,在Java语言中,我认为当您进行类似Object1==Object2默认情况下,它比较对象的Hashcode,除非重写equal()方法,因为=比较器是equal方法的一种快捷方式。 如果我错了,请纠正我 问题是,在C#中是否相同?当您将对象与==进行比较时,它会比较引用(它们是否指向同一对象)=绝对不是equals的快捷方式 在C#中,==做同样的事情,但有一个重要的区别——在C#中,可能重载==,因此可能为操作符定义新的含义。例如,字符串的==比较字符串与另一个字符串的内容。默认情况下,运算
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)
):
- 对于某些内置类型,将执行直接比较(
s等具有操作码)int
- 如果定义了显式的
运算符,则调用该运算符=
- 对于
,应用“提升”规则,然后可为null的
应用于值(如果两者均为非null)=
- 对于类,默认值为引用相等
- 对于结构,没有默认的
实现==