java笔记--Object类

Object:

Object是不断抽取而来的,具备所有对象的共性内容,是所有类的根类。

常用的共性功能:

1 equals方法:

class Person extends Object{
    private int age;
    Person(int age){
        this.age=age;
    }
    /*
    //比较Person的年龄,是否是同龄人
    public boolean compare(Person p){
        return this.age==p.age;
    }
    */

    /*equals方法覆盖     开发的时候经常用
    一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
    */
    public boolean equals(Object obj)//Object obj=p2{
    {
        if(obj instanceof Person){
            //return flase
            throw new ClassCastException("类型错误");
        }
        Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
        return this.age==p.age;
    }
}
class Demo{}
public class ObjectDemo {
    
    public static void main(String[] args) {    
        Person p1=new Person(20);
        Person p2=new Person(20);
        Person p3=p1;
        Demo d=new Demo();
        
        System.out.println(p1==p2);
        System.out.println(p1==p3);
        System.out.println(p1.equals(p2));//比较的是地址,是否指向同一个对象
        System.out.println(p1.equals(p3));
        System.out.println(p1.equals(d));
    }
}

运行:

2 hashCode方法:(重点:结构体会用)

当equals方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

class Person extends Object{
    private int age;
    Person(int age){
        this.age=age;
    }
    public boolean equals(Object obj)//Object obj=p2{
    {
        if(obj instanceof Person){
            //return flase
            throw new ClassCastException("类型错误");
        }
        Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
        return this.age==p.age;
    }
    public int hashCode(){
        return age;
    }
}
class Demo{}
public class ObjectDemo {
    
    public static void main(String[] args) {    
        Person p1=new Person(20);
        Person p2=new Person(20);
        Person p3=p1;
        Demo d=new Demo();
        
        System.out.println(p1);
        System.out.println(p1.hashCode());
        System.out.println(Integer.toHexString(p1.hashCode()));
    }
}

运行:

3 getClass:

系统自带的类Class里的方法,在主函数中添加代码:

Class clazz1=p1.getClass();
        Class clazz2=p2.getClass();
        System.out.println(clazz1==clazz2);
        System.out.println(clazz1.getName());

运行:

get的Name就是编译类Person后得到的Person.class字节码文件的Name。

4 toString方法:

class Person extends Object{
    private int age;
    Person(int age){
        this.age=age;
    }
    
    public boolean equals(Object obj)//Object obj=p2{
    {
        if(obj instanceof Person){
            //return flase
            throw new ClassCastException("类型错误");
        }
        Person p=(Person) obj;
        return this.age==p.age;
    }
}
class Demo{}
public class ObjectDemo {
    
    public static void main(String[] args) {    
        Person p1=new Person(20);
        Person p2=new Person(20);
        Person p3=p1;
        Demo d=new Demo();
        
        System.out.println(p1);
        System.out.println(p1.getClass().getName()+"$"+Integer.toHexString(p1.hashCode()));
    }
}

运行:

在Person中添加方法:

public String toString(){//System.out.println(p1);主函数中会默认调用toString
        return "Person :"+age;
    }

运行:

在开发中,像Person这种类似于数据模型的类,就是说这种类会产生n多对象(学生那,工人那...),他们里边通常都会覆盖equals、hashCode、toString方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,467评论 18 399
  • 此文已经同步至个人站点博客,点击下方链接可以体验更加阅读模式:《java题库》 1.Hashcode 的作用 对于...
    千淘萬漉阅读 7,546评论 0 3
  • Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Ob...
    时待吾阅读 3,405评论 0 1
  • 是时候为今天种下的好种子浇水施肥了。近期目标是天天有包桌、会议及团购,订单天天有,生意兴隆,月月有盈余,把拖欠的款...
    金刚家人阅读 1,166评论 1 0
  • 016|选址逻辑:不知道选贵而近,还是远而便宜的地方开店,怎么办? 我们花了三周时间,深刻理解了用户的心理。...
    GTR001阅读 4,932评论 13 0

友情链接更多精彩内容