欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习笔记:Object类(toString 和 equals 方法)

程序员文章站 2022-03-18 11:29:54
...

        Object类是一个特殊的类,是所有类、数组(数组和对象都是引用类型,都储存在对内存中)、枚举类的父类(任何Java对象都可以调用Object类的方法),一个类如果没有显式声明继承于某个类,那么他将默认继承object类。

        Object.java源码中,这样描述Object类:“Object是类层次结构的根。每个类都有@code对象作为超类。所有对象,包括数组,实现该类的方法。”

          他有一个构造方法,用来构造i一个新的对象:

public Object() {}

Object类主要包含11个方法;

         ①public String toString();

public String toString() {

    return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

         jdk源码中,这样描述toString方法:“返回对象的的字符串表示。一般来说, toString方法返回一个字符串“文本表示”这个对象。结果应该成为一个简洁但信息丰富的代表,这很容易读的人。建议所有的子类都覆盖这个方法。”,该字符串内容就是对象的类型aaa@qq.com+内存地址值。

       在实际开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此每个实体类也需要重写它,重写格式一般为显示实体类属性值,可作为测试使用。 

       在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate... ,也可以使用快捷键 alt+insert ,点击 toString() 选 项。选择需要包含的成员变量并确定。

例如自定义的Person类,如下所示:

public class Person {

    private String name;

    private int age;

    @Override

    public String toString() {

        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    
    }

    // 省略构造器与Getter Setter

}

Ps:直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法

学习笔记:Object类(toString 和 equals 方法)

 

②public boolean equals(Object obj) ;

public boolean equals(Object obj) {

    return (this == obj);

}

jdk源码中,这样描述equals方法:"表示其他对象是否“等于”这个",其比较的的对象的内存地址,与对象内容无关。

学习笔记:Object类(toString 和 equals 方法)

 

【关于 == 和 equals 的区别:https://www.cnblogs.com/dolphin0520/p/3592500.html

如需对象内容的比较,则需重写equals方法(开发中,比较地址值直接用 == 就足够了,equals 一般用来比较有意义的东西

)。

import java.util.Objects;

public class Person {

    private String name;

    private int age;

    @Override

    public String toString() {

        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';

    }

    // 省略构造器与Getter Setter



    @Override
    
    public boolean equals(Object o) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        return age == person.age &&

        Objects.equals(name, person.name);

    }

}

【 Objects类

在刚才IDEA自动重写equals代码中,使用到了 java.util.Objects 。

在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是 null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表 示形式、比较两个对象。

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问 题。方法如下:

public static boolean equals(Object a, Object b) :判断两个对象是否相等。

源码:

public static boolean equals(Object a, Object b) {

    return (a == b) || (a != null && a.equals(b));

}

例: 

public static void main(String[] args) {

        /*
                 public static boolean equals(Object a, Object b) {
                    return (a == b) || (a != null && a.equals(b));
                }

                || : 左边为true,右边不执行

                空指针安全
         */
        String s1 = "abc";
        String s2 = null;
        //        boolean result = s1.equals(s2); // 空指针 java.lang.NullPointerException
        boolean equals = Objects.equals(s1, s2);
        System.out.println(equals);
    }