JDK类库的根类Object

8 篇文章 0 订阅

1.1 JDK类库的根类:Object

研究Object类中的方法,就是所有Object类的所有子类通用的任何一个类都默认继承Object。都直接或者间接继承

1.2 Object类中的常用方法:

String toString()//返回对象的字符串表示形式
boolean equals (Object obj) //判断两个对象是否相等
protected void finalize()//垃圾收集器在对象上调用该对象
int hashCode() //返回对象的哈希码值
protected Object clone() //创建并返回此对象的副本克隆

1.3 如何查找Object类中的常用方法

方法一:查看源代码
方法二:查阅JAVA的类库的API

1.4 关于Object类中的toString()方法

1)源代码:
public String toString() {
	return this.getClass().getName()+"@"+Integer.toHexString(hashCode);
}

以上源代码默认实现形式为:

类名@对象的十六进制的内存地址

2)toString方法设计的目的:

通过调用此方法将一个"java对象"转换成"字符串"表现形式

3)写一个类,toString()方法都是要被再次重写的

满足简洁、详实、易阅读的要求

4)代码示例:

public class test {
    public static void main(String[] args) {
        Mytime01 mytime01 = new Mytime01(2020,9,26);
        System.out.println(mytime01);
    }
}
class Mytime01{
    int year;
    int month;
    int day;
    public Mytime01(){

    }
    public Mytime01(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    
    //重写toString方法,重写原则简洁、易阅读、详实
    public String toString(){
        return this.year+"/"+this.month+"/"+this.day;
    }
}

1.5 关于Object类中的equals()方法

1)源代码:
public boolean equals(Object obj){
        return (this == obj);
}

以上源代码默认实现形式:Object类中默认"=="equals()比较两个对象的内存地址

2)equals方法设计的目的:

通过调用此方法比较两个java对象是否相等

3)"=="用来判断两个基本数据类型的内存地址是否相等。

而如果我们要比较两个数据类型的内容相等,则子类必须重写Object类中的equals()方法来实现两个对象的内容是否相等

4)代码示例:
public class test02 {
    public static void main(String[] args) {
        Mydata mydata = new Mydata(10,15,25);
        Mydata mydata2 = new Mydata(10,15,25);
        //未重写equals()方法之前【比较的是内训地址】,false
        System.out.println(mydata.equals(mydata2));

        //重写equals()方法之后【比较的是对象内容】,true
    }
}
class Mydata {
    private int hour;
    private int minute;
    private int second;

    public Mydata() {

    }
    public Mydata(int hour, int minute, int second) {
        this.hour = hour;
        this.minute = minute;
        this.second = second;
    }

    //重写equals()方法【当 年相同、月相同、日相同时,表示两个对象相等,返回true】
    public boolean equals(Object obj) {
//        //具体代码实现
//        //1.获取第一个日期的年月日,2.获取第二个日期的年月日,3.再对比
//        int h = this.hour;
//        int m = this.minute;
//        int s = this.second;
//        if (obj instanceof Mydata){
//            Mydata md = (Mydata)obj;
//            if (h == md.hour && m == md.minute && s == md.second){
//                return true;
//            }
//        }
//        return false;


        //简洁优化版
        if (obj == null || !(obj instanceof Mydata)){  //情况1:obj为空;    情况2:obj != Mydata
            return false;
        }else if (this == obj){  //情况3:obj == this,内存相同
            return true;
        }else{  //情况4:obj转化Mydata
            Mydata md = (Mydata)obj;
            return md.hour == this.hour && md.minute == this.minute && md.second == this.second;
            }
        }


//        if (obj == null){
//            return false;
//        }
//        if (!(obj instanceof Mydata)){
//            return false;
//        }
//        if (obj == this){
//            return true;
//        }
//        Mydata md = (Mydata) obj;
//        if (md.second == this.second && md.minute == this.minute && md.hour == this.hour){
//            return true;
//        }
//        return false;

}

1.6 String类重写的toString()和equals()方法

1.6.1 toString()

1)String类有没有重写toString方法?
    String name=new String("123");
    System.out.println(name);  //123
    System.out.println(name.toString());  //123

如果String类没有重写toString()方法,则输出结果:java.lang.String@十六进制的内存地址
如果String类已经重写toString()方法,则输出结果:java对象的字符串形式

2)总结:

String类已经重写了toString方法

3)写一个类,toString()方法都要被再次重写

重写规则:简洁、明了、易阅读
System.out.println(name); //这里会自动调用"引用name"的toString()方法

1.6.2 equals()

1) 大部分情况下,String类创建新字符串对象用以下形式
    String s1 = "456";
    String s2 = "456";
    System.out.println(s1.equals(s2));  //true
    System.out.println(s1 == s2);  //true
2)但实际上String也是一个类,不属于基本数据类型,却一定存在构造方法
    String s3 = new String("789");
    String s4 = new String("789");
    System.out.println(s3 == s4);  //false, "双等号"比较的是两个对象的内存地址是否相等
    System.out.println(s3.equals(s4));   //true,String作为Object的子类重写了equals()方法,比较的是两个对象的数据内容是否相等
3)总结:

String类已经重写了equals()方法。比较两个字符串不能用“==”,而必须要用equals(),equals是通用的
重写规则:自己定。主要看什么和什么相等时,表示两个对象相等

4)注意:

equals()方法要重写彻底,在两个类中的equals()比较重写方法都要彻底。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮怪鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值