Object类详解(未完)

        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方法返回一个字符串“文本表示”这个对象。结果应该成为一个简洁但信息丰富的代表,这很容易读的人。建议所有的子类都覆盖这个方法。”,该字符串内容就是对象的类型+@+内存地址值。

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

       在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()方法

扫描二维码关注公众号,回复: 3202425 查看本文章

②public boolean equals(Object obj) ;

public boolean equals(Object obj) {

    return (this == obj);

}

jdk源码中,这样描述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);
    }

猜你喜欢

转载自blog.csdn.net/weixin_38816084/article/details/82586437