Object类

作者 : 开心源码 本文共2463个字,预计阅读时间需要7分钟 发布时间: 2022-05-12 共162人阅读

Object类

面向对象的核心思想:“找合适的对象,做适合的事情”。
合适的对象:

  • 自己形容类,自己创立对象。
  • sun已经形容了好多常用的类,可以使用这些类创立对象。
  • API(Application Program Interface)

sun定义的那么多类的终极父类是Object,任何一个类都继承了Object类。
Object形容的是所有类的通用属性与方法。

一、Object类常用方法

1.toString()

toString() 返回对象的形容信息 :

java.lang.Object@de6ced   类名@哈希码值的十六进制形式。

此形容信息不能直观的展现对象的信息,
父类的指定的功能不能满足要求,那么子类可以复写父类的功能函数。那么该对象再调用toString()方法时,则会调用子类复写的toString方法。

重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的数据格式。

package com.hcx;class Person {        String name;    int age;    public Person() {    }    public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }}class Demo{    public static void main(String[] args) {        Person p = new Person();        System.out.println(p);//com.hcx.Person@15db9742    }}

重写toString方法,按照想要的格式输出person的信息

package com.hcx;class Person {        String name;    int age;    public Person() {    }    public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }        @Override    public String toString() {        return this.name+"-"+this.age;    }}class Demo{    public static void main(String[] args) {        Person p = new Person("hcx",23);        System.out.println(p);//hcx-23    }}

2.equals(Object obj)

用于比较两个对象的内存地址,判断两个对象能否为同一个对象。

重写equals方法:
Object的equals方法默认比较的是两个对象的内存地址,目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合现在的需求。

    @Override    public boolean equals(Object obj) {         Person p  = (Person)obj;        return this.id== p.id;    }

3.hashCode()

返回该对象的哈希码值:采用操作系统底层实现的哈希算法。
同一个对象的哈希码值是唯一的。

java中的规范:一般重写了一个类的equals方法,我们都会重写它的hashCode方法。
假如两个对象equals返回true,那么这两个对象的hashCode码必需一致。

class Person{        int id;    String name;    public Person(int id, String name) {        this.id = id;        this.name = name;    }    public Person() {    }        @Override    public String toString() {        return "编号:"+ this.id + " 姓名:"+this.name;    }        //为什么要重写:Object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证,所以Object类的equals方法不符合我现在的需求。    @Override    public boolean equals(Object obj) {         Person p  = (Person)obj;        return this.id== p.id;    }        @Override    public int hashCode() {        return  this.id;    }}

直接输出一个对象的时候和输出对象的toString方法返回的字符串结果是一样的:

直接输出一个对象的时候,实际上在println方法内部会调用这个对象的toString方法,把toString方法返回的内容输出。

public class Demo{    public static void main(String[] args) {                /*        Object o = new Object();        System.out.println(o.toString());  // java.lang.Object@18b3364    返回的字符串表示: 完整类名+@+ 对象的哈希码        //直接输出一个对象的时候,实际上在println方法内部会调用这个对象的toString方法,把toString方法返回的内容输出。        System.out.println(o);  // java.lang.Object@18b3364                  Person  p1 = new Person(110,"小红");        System.out.println("p1:"+p1);          //假如我们能够输出一个p对象的时候,输出的格式: 编号:110 姓名: 小红..        Person  p2 = new Person(112,"小明");        System.out.println("p2:"+p2);          */        Person p1 = new Person(110,"小红");        Person p2 = new Person(110,"小明");        //需求:在现实生活中只需两个人的身份证一致,那么就是同一个人。        System.out.println("p1与p2是同一个对象吗?"+ p1.equals(p2));                System.out.println("p1哈希码:"+ p1.hashCode());        System.out.println("p2哈希码:"+ p2.hashCode());    }}

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Object类

发表回复