在Java语言中,我认为在默认情况下进行Object1 == Object2;
之类的比较时会比较对象的Hashcode除非你重写了equal()方法,因为==
比较器是一种等于方法的捷径。
如果我错了,请纠正我!
问题是,在C#中是否相同?
答案 0 :(得分:8)
在C#中,==
从不直接调用x.Equals(y)
(除非您包含string.Equals(x,y)
):
int
s等有操作码)==
运算符,则称为Nullable<T>
,“已解除”规则已应用,如果两者都为非空,则==
将应用于值==
实施答案 1 :(得分:3)
默认情况下,运算符== 通过确定两个引用是否指示相同的对象来测试引用相等性,因此引用类型不需要实现operator ==以获得此功能。当一个类型是不可变的,意味着实例中包含的数据不能被改变时,重载operator ==来比较值相等而不是引用相等可能是有用的,因为作为不可变对象,只要它们具有它们就可以被认为是相同的相同的价值。不建议在非不可变类型中覆盖operator ==。
等于是一种虚方法,可以让任何类覆盖其实现。任何表示值的类(基本上是任何值类型)或作为组的一组值(例如复数类)都应该重写Equals。如果类型实现了IComparable,它应该重写Equals。
答案 2 :(得分:2)
将对象与==进行比较时,它会比较引用(它们是否指向同一个对象)。 ==
绝对不是平等的捷径。
在C#中,==在一个重要的区别中做同样的事情 - 在C#中,可以重载==,因此可以为运算符定义新的含义。例如,string's ==将字符串的内容与另一个进行比较。
答案 3 :(得分:1)
在Java和C#中,==运算符用于比较引用,而Equals()方法用于比较值。
答案 4 :(得分:0)
不,这不一样。 如果两个引用都指向同一个对象,则obj1 == obj2为true。但是,例如,如果这些是包含相同内容的2个不同的字符串对象,则它将是错误的。
示例:
object obj1 = new Something(123);
object obj2 = new Something(123);
=> obj1 != obj2