等于/等于和==运算符之间的差异?

44 c# java

a == b和之间有什么区别a.Equals(b)

Jon*_*eet 51

假设类型ab是引用类型:

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

  • 在C#中它取决于.除非有一个处理它的重载运算符,否则==将表现得像Java(即比较引用相等).但是,如果有相匹配的过载编译时类型的ab(例如,如果他们都声明为字符串),那么超载将被调用.这可以表现怎么想的,但它通常实现的值相等(即ab可参照不同,但相同的值,它仍然会返回true).

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

当然,如果anull,那么你会得到一个NullReferenceException/ NullPointerException当您尝试调用a.equals(b)a.Equals(b).


TSt*_*per 13

==操作符检查是否两个对象是完全一样的对象,它是不是在大多数情况下要走的路.该的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
Run Code Online (Sandbox Code Playgroud)

  • 这是哪种语言?在C#中,除非你编写自己的`Equals`方法,否则默认方法将使用引用相等(它与==相同) (5认同)