Java Object类的使用介绍

一、Object类概述

  • Object类是所有类的父类,Java中的所有类都直接与间接的继承了Object类。
  • 如果一个类没有指定父类,那么默认继承Object类

二、toString方法

返回该对象的字符串表示。
通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。
结果应是一个简明但易于读懂的信息表达式。

1.方法摘要

方法信息:
public String toString()
返回:
该对象的字符串表示形式。

2.重写toString方法

为什么要重写toString方法

当打印一个对象名称时,如果不重写toString方法,那么将会打印出对象的地址值,实际运用中意义不大,这是由Object类决定的。要想改为要想打印的信息,就必须对toString方法进行重写。

代码实例

新建Person类

public class Person [extends Object]{
    
    
    private String name;
    private int age;

    public Person() {
    
    }
    public Person(String name, int age) {
    
    this.name = name;       this.age = age;}
    public String getName() {
    
    return name;}
    public void setName(String name) {
    
    this.name = name;}
    public int getAge() {
    
    return age;}
    public void setAge(int age) {
    
    this.age = age;}

    /*
    直接打印对象的地址值没有意义所以要重写Object类的toString方法
     */
    @Override
    public String toString() {
    
    
        return "Person{name = "+ name+",age = "+age +"}";
    }
    //toString也可以使用集成开发环境直接生成
}

新建测试类,使用toString方法

public class TestToString{
    
    
    public static void main(String[] args) {
    
    
        //Person类默认继承Object类,所以我们可以使用Object类的toString方法(返回值为String)
        Person p = new Person("张三丰",18);
        //如果在Person中没有重写toString方法,则打印对象的地址值
        //如果在Person对toString方法进行了重写,则按照指定格式打印
        System.out.println(p.toString());
        System.out.println(p);
    }
}

【tips】

看一个类是否重写了toString方法,直接打印这个对象名
如果直接打印出地址值说名没有重写toString方法
如果重写了toString方法,会按照指定格式输出

三、equals方法

指示其他某个对象是否与此对象“相等”
源码:
public boolean equals (Object obj){
return (this == obj);
}

1.方法摘要

方法信息:
public boolean equals(Object obj)
参数:
obj - 要与之比较的引用对象
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。

2.默认地址值比较

继续使用上述Person类

新建测试类,使用equals方法

public class TestEquals {
    
    
    public static void main(String[] args) {
    
    
        /*
        Person类默认继承Object类,所以可以使用equals方法,指示另外一个对象与当前对象是否相等
         */
        Person p1 = new Person("张三",18);
        Person p2 = new Person("李四",20);
        System.out.println(p1.equals(p2));//打印结果:false

        //把p2赋值给p1
        p1 = p2;
        System.out.println(p1.equals(p2));//打印结果:true
    }
}

【tips】

对于基本数据类型,比较的是
对于引用数据类型,比较的是 地址值

3.对象内容比较

和toString方法一样,equals方法也是使用的地址值进行比较,意义不大。要进行对象属性的比较,依旧需要重写equals方法

在Person类中重写equals方法(集成开发环境也可以生成,推荐自己写一下,体会原理)

    @Override
    public boolean equals(Object obj) {
    
    
        //增加判断,如果对象参数为自己,直接返回true
        if(obj == this){
    
    
            return true;
        }
        //增加判断,如果对象为空,直接返回false,提高程序运行效率
        if(obj == null){
    
    
            return false;
        }
        //增加判断,防止类转换异常
        if(obj instanceof Person){
    
    
            //使用向下转型,才可以使用子类特有的属性和方法
            Person p = (Person)obj;
            //比较两个对象的属性
            boolean b = this.name.equals(p.name) && this.age == p.age;
            return b;
        }

修改测试类

public class TestEquals {
    
    
    public static void main(String[] args) {
    
    
        /*
        Person类默认继承Object类,所以可以使用equals方法,指示另外一个对象与当前对象是否相等
        源码:
        public boolean equals (Object obj){
            return (this == obj);
        }
         */
        Person p1 = new Person("张三",18);
        Person p2 = new Person("张三",18);
        System.out.println(p1.equals(p2));//打印结果:true
        //虽然是两个对象,但是他们的内容一样。
        //根据我们重写的equals方法,所以返回true
}

四、Objects类

从 jdk1.7 开始,才有Objects类

类的基本信息
public final class Objects extends Object
该类由一些静态方法组成,并声明为最终类不可被其他类继承。
这些方法是 null -safe(空指针安全的)或 null(容忍空指针的)方法。
计算对象的hashcode,为对象返回一个字符串,并比较两个对象。

public class DemoObjects {
    
    
    public static void main(String[] args) {
    
    
        String str1 = null;
        String str2 = "csdn";

        //使用String类的equals方法比较
        System.out.println(str1.equals(str2));//发生空指针异常,代码报错

        //使用Objects类的equals方法比较
        System.out.println(Objects.equals(str1,str2));//程序正常运行,false
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44580492/article/details/107326725