Object类

目录

1、在类中定义的方法

2、==和equals

3、finallize方法


(所有类的父类)在java.lang包下

1、在类中定义的方法

equals和hashcode重写的时候一定要一起写

finalize方法

equals方法 //判断两个对象的虚地址是否相等public boolean equals(Object obj)

hashcode方法 //哈希码值public int hashcode() 两个引用的虚地址相同时返回相同的值,反之

toString方法 //返回该对象的字符串表示形式public String toString()

clone方法

getclass方法

public final Class<T> getClass() //返回Object的运行时类

2、==和equals

public class Course {
    private String name;
    private double score;

    public Course() {
    }

    public Course(String name, double score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }
//打印name和score的值
    //方案1:System.out.println()打印拼接对象属性值,方案不是特别好,每打印一个对象都要拼接属性
    //方案2:重写toString()方法,直接打印对象就可以了,代码不会重复写
    @Override
    public String toString() {
        return "Course{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
//重写equals和hashcode 有个原则
    //1、equals和hashcode要同时重写
    //2、重写的结果:两个对象比较equals 返回true , hashcode 返回必须是true
    //两个对象比较hashcode 返回true  equals返回的不一定是true(可以是true也可以是false)
    //因为我们自己在业务上判断两个对象相等  使用equals方法,不使用hashcode,
    //但是在集合类中,判断两个对象相等,优先使用hashcode,如果能判断false结果,就不能调用equals方法,hashcode返回true时,可使用equals;
    //一般情况下,java会大量使用集合,所以要符合集合判断两个对象的逻辑

    //重写equals可以按照业务特殊需求来定制判断是否相等
    //但是==没法定制,就是判断2个对象的地址是否相等
    @Override
    public boolean equals(Object o) {
        //参数o,表示传进来的对象,本类对象的引用this比较
        //需求:业务上提个要求,两个课程如果名称相同,就认为是相等
        if (o==null){
            return true;
        }else if (!(o instanceof  Course)){
            return false;//传进来的对象不是Course类的对象,返回false
        }else{
            //判断对象的name字符串是否相等
            if(this.name==((Course) o).name){
                return true;
            }else{
                return false;
            }
        }
        //判断对象的name字符串是否相等
    }

    @Override
    public int hashCode() {
        return this.name.hashCode();
    }

    public static void main(String[] args) {
        Course c1=new Course("java",90);
        Course c2=new Course("java",80);
        //对象的toString
        System.out.println(c1);
        System.out.println(c2);
        System.out.println("========================");
        //Object1的toString
        System.out.println(c1.toString());
        System.out.println(c2.toString());
        System.out.println("=========对象相等=========");
        Course c3=c1;
        //判断两个对象的地址值是否相等,使用==判断对象相等并没有调用equals方法,==表示判断两个
        System.out.println(c1==c2);
        System.out.println(c1==c3);
        System.out.println("=========equals=========");
        //比较两个对象的地址值是否相等
        System.out.println(c1.equals(c2));
        System.out.println(c1.equals(c3));
    }
}

Run:
Course{name='java', score=90.0}
Course{name='java', score=80.0}
========================
Course{name='java', score=90.0}
Course{name='java', score=80.0}
=========对象相等=========
false
true
=========equals=========
true
true

3、finallize方法

Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前,做必要的清理工作。这个方法是由垃圾收集器在确定对象没有被引用时对这个对象调用的。它是在Object 类中定义的,因此所有的类都继承了它。子类覆盖finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值