equals(o1,o2) 与 “o1 == o2” 区别?
首先,equals(o1,o2)只能用于对象的比较,不能用于基本数据类型(如 int、double等8种)。
(1)那么基本数据类型的相等比较用“==”而不能用equals().
接下来说,对象的相等比较,可以用equals(o1,o2) 与 “o1 == o2”,它们的区别是:
简单说:equals(o1,o2)比较的是两对象的内容;“o1 == o2”比较的是两对象的地址。
详述:
(1)先挑直观的说,“o1 == o2”比较的是对象o1和o2在内存中是一个位置还是分存两个位置?我们在操作对象时,都是通过引用变量来进行的。同一个对象,可以与多个引用变量挂钩。换句话说,多个不同的引用变量可指向同一个对象(一个对象一个地址)。“o1 == o2”就是检查引用变量o1与引用变量o2所指向是否为同一个对象(同一个地址),所以又说“o1 == o2”比较的是对象的地址。
(2)包装类型的对象比较时,是对应值的比较。Object有默认的equals方法使用的“==”比较对象地址,所有对象都继承自Object,同样继承了equals方法。可重写equals覆盖,同时重写hashCode()方法。