等于/等于和==运算符之间的区别?
和 有什么区别?a == b
a.Equals(b)
假设 和 的类型是引用类型:a
b
在Java中,==将始终比较标识 - 即两个值是否是对同一对象的引用。这也称为引用相等。Java 没有任何用户定义的运算符重载。
在C#中,这要视情况而定。除非有一个重载运算符来处理它,否则==的行为将像Java一样(即比较引用相等性)。但是,如果存在与 和 的编译时类型匹配的重载(例如,如果它们都声明为字符串),则将调用该重载。这可以按照它想要的方式运行,但它通常实现价值相等(即 并且可以引用不同但相等的值,它仍然会返回 true)。a
b
a
b
在这两种语言中,或者将调用由 声明的 virtual/ 方法,除非编译时类型引入了更具体的重载。这可以在引用的对象的执行时间类型中被覆盖,也可以不被覆盖。在 .NET 和 Java 中,中的实现也会检查标识。请注意,这取决于执行时间类型,而不是重载解析所依赖的编译时间类型。a.Equals(b)
a.equals(b)
Equals
equals
Object
a
a
Object
当然,如果是,那么当您尝试呼叫或时,您将获得/。a
null
NullReferenceException
NullPointerException
a.equals(b)
a.Equals(b)
== 运算符检查两个对象是否完全相同,这在大多数情况下不是要走的路。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