java中有个很重要的类叫Object,它是所有类的超类。java中的每一个类都是由它扩展而来的,所以了解这个类的一些常见方法还是很有必要的。这个类中主要有以下这些方法,并且这些方法都可以在别的所有自定义的类中进行重写。
1.equals()方法:用来检测一个对象是否等于另一个对象。
以下是编写一个相对完美的equals方法的建议:
1)显示参数命名为otherObject,稍后需要将它进行转型操作,转化为相应类型的对象;
2)检测otherObject与this是否引用同一个对象;
3)检测otherObject是否为null,为null则返回false;
4)比较this与otherObject是否是同一个对象。这时候要看情况分析:
*如果子类能拥有自己的相等概念,则使用getClass()方法进行检测;
*如果相等的概念由超类来决定的,则可以使用instanceof进行检测,这样在不同子类之间也可以进行相等的比较。
5)将otherObject转换成相应类型的变量;
6)对所有需要比较的域进行比较操作。如果在子类中重新定义了equals方法,就调用super.equals()
@Override
public boolean equals(Object otherObject)
{
//首先判断是否引用相同对象
if (this == otherObject) return true;
//判断otherObject是否为null
if (otherObject == null) return false;
//检测this和otherObject是否是同一种类型
if(this.getClass() != otherObject.getClass())
return false;
//或者使用instanceof,ClassName为要检验的超类名称
//if(!(otherObject instanceof ClassName))
//return false;
//转换变量的类型
ClassName other = (ClassName) otherObject;
//对所有需要比较的域进行比较,必要时调用super.equals()。
return field1 == other.field1
&& object1.equals(other.object1)
&& ...;
}
2.hashCode()方法:返回对象的散列码。散列码可以是任意的整数,正负数都可以。且要求相等的对象返回的散列码是相同的。
@Override
public int hashCode()
{
//hash方法返回对象的散列码,这里可以有别的自定义的获取散列码的方式。
return Object.hash(objects);
}
3.toString()方法:返回描述对象的字符串。这样当我们调用print()等打印函数时,直接把对象作为参数传入就可以打印出改类所实例化的对象的相关信息。
PS:调试时用来输出对象信息是不错的选择。
@Override
public String toStirng()
{
return this.getClass().getName()
+ "[field1 = " + field1
+ ",object = " + object
+ "]";
}
PS:打印数组信息可以用Array.toString()方法。