Java基础——Object

本文深入探讨Java中对象与类的关系,重点介绍如何通过重写equals()和hashCode()方法来比较对象状态,同时解析getClass()及toString()方法的使用。

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

1、注释
注释不会编译成字节码,习惯写注释,写功能函数前写函数功能。
java程序都定义在类中,java程序都是以类的形式存在的,类的形式其实就是一个字节码文件最终体现。public static void main(String[] args)是固定格式便于jvm认识。
2.Object的方法
通常需要重写(覆盖)原生方法
getClass() equals() toString() HashCode()

这里写图片描述
这里写图片描述

通过字节码文件类可以取到里面的该字节码文件中的其他类以及方法、属性,相当于就是类文件中的类成了Class类的属性了。

/*
Object:所有类的根类
Object是不断抽取而来,具备着对所有对象都具备的共性内容
常用的共性内容(Object类的方法):equals
toString方法==类.getClass().getName()+"@"+Inter.toHexString(类.HasCode())
*/
/*
class Fu //extends Object
{
    Fu()
    {
        super();
    }
}
class Zi extends Fu
{
    Zi()
    {
        super();
    }
}
*/
class Person
{
    private int age;
    Person(int age)
    {
        this.age=age;
    }
    /*
    一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
    */
    //比较Peroson的年龄,是否是同龄人
    public boolean equals(Object obj)//覆盖Object类的方法
    {
        if(!(obj instanceof Person))
        {
            //return false;
            throw new ClassCastException("类型错误");
        }
        Person p=(Person)obj;//Object向下转换,拓展对象的属性
        return this.age==p.age;//通过重写父类的方法实现比较不同的属性,默认是比较对象,即p1==p2 p1.equals(p2)两者等价,都是比较的内存地址是否指向同一个地方,而不是比较的内容
    }
    public int hashCode()
    {
        return age;
    }
}
class Demo
{

}
class objectDemo
{
    public static void main(String[] args) 
    {
        Person p1=new Person(20);
        Person p2=new Person(20);//两者的地址不相等,仅内容相等
        Demo d=new Demo();
        Person p3=p1;

        Class clazz1=p1.getClass();
        Class clazz2=p2.getClass();
        Class clazz3=d.getClass();

        System.out.println(p1);//打印的是:Person@14 14是16进制的哈希码,实质上是调用的父类(Object的hashCode方法),默认调用的是toString方法
        System.out.println(p1.hashCode());
        System.out.println(p1==p2);
        System.out.println(p1.equals(p2));
        System.out.println(clazz1==clazz2);//相等,返回True,因为这个Person类字节码文件中的所有的类会被编译成字节码而形成Class的对象,所以p1.getClass()其实是调用的是Object的方法,返回的是这个字节码文件类,所以相等
        System.out.println(clazz1.getName());//返回的是Person
        System.out.println(clazz3==clazz2);//不相等,不是同一个类的字节码文件,该d类的字节码文件是Demo.class


        System.out.println(p1.toString());//打印的是:Person@14
        System.out.println(p1.equals(d));

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值