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

荐 Java Object类的使用介绍

程序员文章站 2022-06-24 23:08:21
一、Object类概述二、toString方法1.方法摘要2.重写toString方法三、equals方法1.方法摘要2.默认地址值比较3.对象内容比较四、Objects类...

一、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
    }
}

本文地址:https://blog.csdn.net/weixin_44580492/article/details/107326725