Object类的概述

本文深入探讨了Java中Object类的重要方法,包括构造方法、equals()和toString()。通过实例展示了未重写与重写这两个方法时,对象比较和字符串表示的区别。重写equals()用于内容比较,toString()则用于生成对象的清晰字符串表示。了解这些基础知识对于提升Java编程能力至关重要。
摘要由CSDN通过智能技术生成

Object类的概述和重要方法

  1. Object是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或者间接的继承自该类

  2. 构造方法:public Object()

  3. public boolean equals(Object obj);比较对象是否相等,默认比较地址,重写可以比较内容,自动生成

  4. public String toString();返回对象字符串表示形式,建议所有子类重写该方法,自动生成

  5. 回想面向对象中,为什么子类构造方法默认访问的是父类的无参构造方法?
    因为他们的顶级父类只有无惨构造方法

以图文和代码形式讲解:

图:建立Demo测试类和student类(默认继承Object类)

柏维怡我爱你
重写的情况下:

  • Student类
package CCom.Cnn;

public class Student{
   //此时默认继承Object祖宗类
   private String name;
   private int age;

   public Student() {
   }

   public Student(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;
   }

}

  • Demo类
package CCom.Cnn;
public class Demo {
    public static void main(String[] args) {
        Student s = new Student();
        Student s2 = new Student();
        s.setName("沸羊羊");
        s.setAge(18);
        System.out.println(s.getName()+s.getAge());
        System.out.println(s.equals(s2));//比较的是地址是否相等
        System.out.println(s);//CCom.Cnn.Student@1b6d3586
    }
}

输出的结果:
沸羊羊18
false
CCom.Cnn.Student@1b6d3586

重写的情况下:

  • Student类
package CCom.Cnn;

import java.util.Objects;

public class Student{
   //此时默认继承Object祖宗类
   private String name;
   private int age;

   public Student() {
   }

   public Student(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;
   }

   //重写toString()方法
   @Override
   public String toString() {
       return "Student{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
   }

   
   //重写equals(Object o)方法
   @Override
   public boolean equals(Object o) {
      //this---s   o---s2
       if (this == o) return true;//比较地址是否相等
       if (o == null || getClass() != o.getClass()) return false;//判断s2地址是否为空或者类名下s类是否等于s2类
       Student student = (Student) o;//前两个都满足,则向下转型让student=s2
       return age == student.age && Objects.equals(name, student.name);//比较s下的age和name内容是否等于student(student=s2)下的age和name内容
   }
   
}

注意学生类的重写方法

  • Demo类
package CCom.Cnn;
public class Demo {
    public static void main(String[] args) {
        Student s = new Student();
        Student s2 = new Student();
        s.setName("沸羊羊");
        s.setAge(18);
        s2.setName("沸羊羊");
        s2.setAge(18);
        System.out.println(s.getName()+s.getAge());
        System.out.println(s.equals(s2));//子类重写后比较的是内容是否相等
        System.out.println(s);//子类重写后更加清晰看清我们返回字符串的内容

        /*
              equals(Object obj)重写后比较内容的原因:
               public boolean equals(Object obj) {
                   return (this == obj);
         }
         */


        /*     toString()重写返回对象字符串的内容地址的原因:
               public void println(Object x) {
                  String s = String.valueOf(x);
                  synchronized (this) {
                   print(s);
                   newLine();
             }
         }

               public static String valueOf(Object obj) {
               return (obj == null) ? "null" : obj.toString();
         }

         public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
         */
    }
}

输出的结果:
沸羊羊18
true
Student{name=‘沸羊羊’, age=18}

一定重视这个!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发热的嘤嘤怪(2003计科胜胜同学)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值