一尘不染

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

java

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


阅读 820

收藏
2020-03-03

共1个答案

一尘不染

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

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

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

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

当然,如果a是,null则在尝试调用或时会得到一个NullReferenceException/NullPointerExceptiona.equals(b)a.Equals(b)

2020-03-03