JavaObject类基本方法的用法及重写

Java Object类里基本方法的用法及重写

Object类在java.lang.Object包里

两个基本方法:

(1)public String toString() 返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。

(2)public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。

toString代码如下

public class Person {
    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;
    }

首先建立一个Person类,写出其get、set 方法,并建立一个无参构造及全参构造。

public class Demo01ToString {
    public static void main(String[] args) {
        /*
        Person 类默认继承Object类,所以可以使用object类的toString方法
       String toString();
         */
        Person p=new Person("zhangsan",18);
        String s=p.toString();
        //直接打印对象的名字就是在调用对象的toString方法,两个相等
        System.out.println(s);
        System.out.println(p);
        //看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可
        //如果没有重写toString方法,那么打印的就是对象的地址值(默认)
        Random r=new Random();
        System.out.println(r);
        Scanner sc=new Scanner(System.in);
        ArrayList<Integer> list =new ArrayList<>();
        list.add(1);
        list.add(2);
    }
}


如果没有重写,输出结果如下所示。

在这里插入图片描述

分别代表所在包名及类名,以及其下地址名。

由于直接打印对象的地址没有意义,因此需要重写object类的toString()方法打印对象的属性(name,age)。

重写代码如下有两种形式:

    @Override
    public String toString() {
        return "person(name"+name+"age"+age+")";
    }





    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

同样的对于object类里的equals()方法,这个方法的底层是通过==去比较的是引用数据类型的地址是否相等,Object 类的equals方法默认比较的是两个对象的地址,没有意义,所以我们需要重写equals方法,比较两个对象的属性值(name,age)

问题:因为equals方法隐含一个多态

Object obj=p2=new Person(“aaa”,12)多态弊端:无法使用子类特有的内容(属性:方法)解决:可以使用向下转型(强转)把Object转换为Person。

所以可以重写为如下两种形式:


    @Override
    public boolean equals(Object obj) {
        //增加一个判断,传递的参数obj是null,直接返回false
            if(obj==null)
            {
                return false;
            }
        //增加一个判断,传递的参数obj如果是this本身,直接返回true,提高效率
        if(obj==this)
        {
            return true;
        }

        /*
        增加一个判断,是person类型在转换,防止转换异常
         */
    if(obj instanceof Person){
        Person p=(Person)obj;
        //比较两个对象的属性,一个是调用方法的this(p1),一个就是p(obj-p2)
        boolean b=this.name.equals(p.name)&&this.age==p.age;
        return b;
    }
    //不是person类型直接返回false
    return false;
}


    @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);
    }
发布了40 篇原创文章 · 获赞 10 · 访问量 2560

猜你喜欢

转载自blog.csdn.net/lsdstone/article/details/103899781