JAVA---Object类

Object类是所有Java类的父类,不明确继承其他类的类会默认继承Object。equals默认比较对象地址,可重写用于内容比较;hashCode生成对象的唯一标识,常用于哈希表;toString返回对象信息,通常重写以显示对象属性。
摘要由CSDN通过智能技术生成

一.Object类是什么?

Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object, 子类可以使用 Object 的所有方法 。 Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。

所有对象(包括数组)都能使用Object类的方法。

二.一些常用的Object类方法

1.equals(Object obj)

● ==与equals(Object obj)的区别

⑴==是一个比较运算符

①==:既可以判断基本类型,又可以判断引用类型

②==:如果判断基本类型,判断的是值是否相等。例:int i=10;double d=10.0;  i==d为true

③==:如果判断引用类型,判断的是地址是否相等,即判断是不是同一个对象       

 例:

 跟类型无关,子类的对象地址赋值给父类,也是指向同一对象,故仍为true

⑵ equals方法

equals只能判断引用类型,也就是一个类

不同类型的对象调用的equals方法都是自己的类中重写的equals方法,比较两个对象的内容是否一样

如:

Object的equals源码是:(判断地址是否一致,即是否为同一对象)

 String的equals源码是:(重写后判断两个对象的内容是否一致)

Integer的equals源码是:(重写后判断两个对象的值是否一致)

●  练习

(1)

(2)重写Person类equals

public class Person {
    private String name;
    private int age;
    private char gender;
}

首先在没有重写前,我们调用的equals方法是从Object类中继承的equals,也就是单纯比较是不是一个对象。

如:

public class EqualsExercise01 {
    public static void main(String[] args) {
        Person person1=new Person("jack",12,'男');
        Person person2=new Person("jack",12,'男');
        System.out.println(person1.equals(person2)); //false
    }
}

现在来重写,要求比较两个对象的内容是否一致

 public boolean equals(Object obj){
        //判断如果比较的两个对象是同一个对象,则直接返回true
       if(this==obj){
           return true;
       }
       //类型判断,是Person 我们才比较
       if(obj instanceof  Person){
           //进行向下转型,因为我需要得到obj的 各个属性
          Person p=(Person)obj;
          return p.getAge()==this.age&&p.getName().equals(this.name)&&p.getGender()==this.gender;
       }
       //如果不是person,则直接返回false
        return false;
    }

注:instanceof是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。 

现在调用equals后

System.out.println(person1.equals(person2));//true

(3)(注意String类的equals系统已经重写,比较的是二者的内容)

 2.hashCode

 3.toString

①toString()源码

 例子:

public class EqualsExercise01 {
    public static void main(String[] args) {
        Person person1=new Person("jack",12,'男');  
        System.out.println(person1.toString());
    }
}

输出:com.windows.object.Person@282ba1e

②我们用toString经常是重写,输出对象的属性

因为这个经常用,已经做成了模板,使用快捷键akt+insert -> toStirng 即可(当然也可以自己写)

@Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }

现在使用后输出 Person{name='jack', age=12, gender=男}

③当直接输出一个对象时,toString方法会被默认调用

如:

public class EqualsExercise01 {
    public static void main(String[] args) {
        Person person1=new Person("jack",12,'男'); 
        System.out.println(person1);
    }
}

输出:Person{name='jack', age=12, gender=男}

4.finalize(好像被弃用了,不用看了)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值