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

时间:2011-02-22 08:12:16

标签: c# java equals

在Java语言中,我认为在默认情况下进行Object1 == Object2;之类的比较时会比较对象的Hashcode除非你重写了equal()方法,因为==比较器是一种等于方法的捷径。 如果我错了,请纠正我!

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

5 个答案:

答案 0 :(得分:8)

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

  • 对于某些内置类型,执行直接比较(int s等有操作码)
  • 如果定义了明确的==运算符,则称为
  • for 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