"=="和equals方法究竟有什么区别?

==操作符的功能有两个:

A.如果==的两边都是基本类型变量、包装类对象所组成的表达式,==用于比较两边的表达式的值是否相等——只要两边的表达式的值相等,即使数据类不同,该运算符也会返回true

B.如果==的两边是引用类型的变量,==用于判断这两个引用类型的变量是否引用同一块内存,只有当它们引用同一块内存时,==才会返回true

equals()则是一个java.lang.Object类的一个方法,因此任何Java对象都可调用该方法与其他对象进行比较。java.lang.Object类的equals方法的实现代码如下:

boolean equals(Object o)

{

return this==o;

}

从上面代码可以看出,如果一个类没有重写java.lang.Objectequals()方法时,此时equals()方法的比较结果与==的比较结果是相同的。

Java允许任何类重写equals()方法,重写该方法就是让程序员来自己决定两个对象相等的标准——极端的情况下,我们完全可以设计出Person对象与Dog对象equals()比较返回true的情况——当然一般不会这么设计。

实际上重写equals()方法时通常会按如下格式:

public boolean equals(Object obj)

{

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Person other = (Person) obj;

if (name == null)

{

if (other.name != null)

return false;

}

else if (!name.equals(other.name))

return false;

if (pass == null)

{

if (other.pass != null)

return false;

}

else if (!pass.equals(other.pass))

return false;

return true;

}

上面重写equals()方法用于判断两个Person对象是否“相等”,程序只要两个Person对象的namepass相等,程序就可以把这两个Person对象当成相等——这是系统业务决定的。如果业务需要,我们也可以增加更多的参与判断的Field,当然也可以只根据name进行判断——只要两个Personname相等,就认为两个Person相等,这都是由系统的业务决定。

总结起来就是一句话:开发者重写equals()方法就可以根据业务要求来决定两个对象是否“相等”。

Java Program!
原文地址:https://www.cnblogs.com/programb/p/14068373.html