==用于比较两个变量的值是否相等,也就是比较两个变量对应的内存中的数值是否相同。当比较两个基本数据类型或判断两个引用变量是否指向同一个对象时,应该采用==操作符。
当一个引用变量指向一个对象类型时,此时涉及到两块内存。一个是对象自身的内存,另一个是这个变量的内存。比如Object o = new Object();new Object()是一块内存,而这个变量o是另一块内存,其保存的值就是这个对象所占用的内存的首地址。因此如果要判断两个引用变量是否指向同一个对象时,应该采用==操作符。
equals用于比较两个独立对象的内容是否相同。比如如下代码:
String a = new String("abc");
String b = new String("abc");这里a 指向一块内存,而b指向另一块内存。因此表达式a==b将返回false。而a.equals(b)返回true,因为a、b所指向的两个内存空间的内容是相同的。
当我们自定义了某个类,但没有重写Object的equals方法时,会默认采用Object的equals方法。Object的equals方法内部其实是采用==操作符的。也就是说如果我们创建了这个类的两个相同内容的实例对象,即便我们使用equals方法进行比较,也会返回false。所以我们应该根据实际需要重写这个方法。