等于/等于和==运算符之间的区别?

2022-09-01 00:04:34

和 有什么区别?a == ba.Equals(b)


答案 1

假设 和 的类型是引用类型:ab

  • 在Java中,==将始终比较标识 - 即两个值是否是对同一对象的引用。这也称为引用相等。Java 没有任何用户定义的运算符重载。

  • 在C#中,这要视情况而定。除非有一个重载运算符来处理它,否则==的行为将像Java一样(即比较引用相等性)。但是,如果存在与 和 的编译时类型匹配的重载(例如,如果它们都声明为字符串),则将调用该重载。这可以按照它想要的方式运行,但它通常实现价值相等(即 并且可以引用不同但相等的值,它仍然会返回 true)。abab

在这两种语言中,或者将调用由 声明的 virtual/ 方法,除非编译时类型引入了更具体的重载。这可以在引用的对象的执行时间类型中被覆盖,也可以不被覆盖。在 .NET 和 Java 中,中的实现也会检查标识。请注意,这取决于执行时间类型,而不是重载解析所依赖的编译时间类型a.Equals(b)a.equals(b)EqualsequalsObjectaaObject

当然,如果是,那么当您尝试呼叫或时,您将获得/。anullNullReferenceExceptionNullPointerExceptiona.equals(b)a.Equals(b)


答案 2

== 运算符检查两个对象是否完全相同,这在大多数情况下不是要走的路。Equals 方法将能够在内部比较两个对象

例:

class Mycar
{
  string color;
  Mycar(string str)
 {
   color = str;
 }
}   

Mycar a = new Mycar("blue");
Mycar b = new Mycar("blue");
a==b // Returns false
a.Equals(b) // Returns true

推荐