Object类是Java中所有类的始祖,在Java中每个类都是由Object类扩展而来的,但是在编程的时候并不需要这么写
public class Hero extends Object
如果没有明确指出超类,Object就被认为是这个类的超类。所以Object类是十分重要的。
在Java中只有基本类型不是对象(浮点型、整型、字符型、布尔型共八种基本类型),所有数组类型,不管是对象数组还是基本数据类型的数组都扩展了Object类。
下面介绍Object类中的两个常用方法
一 、equals方法
Object类中equals方法用于检测一个对象是否等于另一个对象。在Object类中,这个方法将判断两个对象**是否具有相同的引(java中的引用类似于C/C++中的指针)。
在这里就要区别于"=="了。一个是用来判断数值是否相等,一个是用来判断引用是否相同。
package superclass;
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name=name;
this.age=age;
}
}
public class Text {
public static void main(String[] args) {
Person p1=new Person("Mike", 20);
Person p2=new Person("Mike", 20);
System.out.println(s1.equals(s2));//判断是否相等
}
}
显然,判断的结果是false,因为equals()方法比较的是两个对象的地址,所以必须重写方法才能使其相等。
package superclass;
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name=name;
this.age=age;
}
//对equals()方法进行重写
public boolean equals(Object obj) {
boolean temp=false;
Person p1=this;
//用关键字instanceof判断是否为Person的一个实例,不是则进行比较
if(obj instanceof Person) {
Person p2=(Person)obj; //强制类型转换成Person类型
if(p1.name.equals(p2.name)&&p1.age==p2.age) {
temp=true;
}
else {temp=false;}
}
return temp;
}
}
public class Text {
public static void main(String[] args) {
Person s1=new Person("Mike", 20);
Person s2=new Person("Mike", 20);
System.out.println(s1.equals(s2));//判断是否相等
}
}
此时,运行结果是true。
二、hashCode()方法
散列码(hash code)是由对象导出的一个整型值。散列码(即哈希值)是没有规律的。如果x和y是两个不同的对象,x.hashCode()于y.hashCode()基本上不会相同。
下列代码来源于网络
class Student
{
String name;
int age;
//重写父类(Object类)中的equals方法
public boolean equals()
{
boolean temp;
Student s1 = new Student();
s1.name="张三";s1.age=12;
Student s2 = new Student();
s2.name="张三";s2.age=12;
System.out.println("s1的哈希码:"+s1.hashCode());
System.out.println("s2的哈希码:"+s2.hashCode());
if((s1.name.equals(s2.name))&&(s1.age==s2.age))
{
temp = true;
}
else
{
temp = false;
}
return temp;
}
//重写hashCode()方法
public int hashCode()
{
return age*(name.hashCode());
}
}
public class Text{
public static void main(String[] args)
{
Student s3 = new Student();
System.out.println(s3.equals()?"s1和s2是同一人":"s1和s2不是同一人");
}
}
输出结果为:
s1的哈希码:9298668
s2的哈希码:9298668
s1和s2是同一人