Object:所有类的超类

本文深入解析Java中的Object类,作为所有类的基类,Object的重要性不言而喻。文章详细介绍了equals方法和hashCode方法的使用及重写,帮助读者理解对象的比较和哈希码的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       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是同一人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值