Java Object类的简单学习

Object的toString方法

  1. toString 方法返回的是字符串,直接打印对象的名字,就是调用对象的toString,也就是打印对象堆内存中的地址值

  2. 重写toString方法

    复制
    /**
    * @Version: 1.8.0_201 Java SE 8
    * @Description: toString 方法返回的是字符串,直接打印对象的名字,就是调用对象的toString
    * 也就是打印对象堆内存中的地址值
    */
    public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
    this.name = name;
    this.age = age;
    }
    public void methodStudentMassage() {
    System.out.println(
    "Student{" +
    "name='" + name + '\'' +
    ", age=" + age +
    '}'
    );
    }
    /**
    * 重写toString方法
    * @return 学生的信息
    */
    @Override
    public String toString() {
    return "Student{" +
    "name='" + name + '\'' +
    ", age=" + age +
    '}';
    }
    }
  3. 测试重写的toString方法

    复制
    /**
    * @Version: 1.8.0_201 Java SE 8
    */
    public class DemoStudentToString {
    public static void main(String[] args) {
    Student student = new Student("Lee Hua", 21);
    // 不重写toString方法
    student.methodStudentMassage();
    // 重写了toString方法
    System.out.println(
    student.toString()
    );
    }
    }
  4. 输出结果

    复制
    Student{name='Lee Hua', age=21}
    Student{name='Lee Hua', age=21}

Object类的equals方法

  1. quals方法:其他某个对象是否与此对象相等

  2. 调用成员方法quals并指定参数为另一个对象,则可判断这两个对象是否相同

    复制
    public boolean equals(Object obj) {
    return (this == obj);
    }

    this 表示:哪个对象调用了equals方法,那么this就是那个对象

  3. 实例理解

    1. 创建一个Person类,用于测试

      • 复制
        public class Person {
        private String name;
        private int age;
        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;
        }
        }
    2. 测试

      复制
      public class DemoPersonEquals {
      public static void main(String[] args) {
      Person person1 = new Person("一号", 20);
      Person person2 = new Person("二号", 21);
      // 对象person1 和 对象person2 进行比较
      boolean p = person1.equals(person2);
      System.out.println(person1);
      System.out.println(person2);
      System.out.println(p);
      }
      }
    3. 输出结果

      复制
      Person@61bbe9ba
      Person@610455d6
      false
    4. 实例补充

      复制
      /**
      * Person类如果重写类Object的toString方法,则返回字符串,而不是地址值
      * 举例:
      */
      @Override
      public String toString() {
      return "Person{" +
      "name='" + name + '\'' +
      ", age=" + age +
      '}';
      }
  4. 在Person类里边覆盖重写equals方法

    复制
    public class Person {
    /**
    * 多态,无法使用子类特有内容,所以可进行覆盖重写
    * 覆盖重写equals方法,提高程序的效率
    */
    @Override
    public boolean equals(Object obj) {
    // 如果传递的参数obj是this本身,直接返回true
    if (obj == this) {
    return true;
    }
    // 如果传递参数是null,直接返回false
    if (obj == null) {
    return false;
    }
    // 防止类型转换报:ClassCastException
    if (obj instanceof Person) {
    // 向下转型,将 obj 转换为 Person 类型
    Person person = (Person)obj;
    return this.name.equals(person.name) && this.age == person.age;
    }
    // 不是Person类,也不是null,也直接返回false
    else {
    return false;
    }
    }
    }
  5. 使用IDEA编译工具,可以用 Generate 直接生成与上等功能代码

    复制
    public class Person {
    @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 &&
    name.equals(person.name);
    }
    }

注意事项

使用equals方法时,防止空指针异常

实例理解

复制
import java.util.Objects;
public class DemoObjectEquals {
public static void main(String[] args) {
String s1 = "abc";
String s2 = null;
// 不会出现空指针异常 // 输出 false
System.out.println(
s1.equals(s2)
);
// 会出现空指针异常NullPointerException // 报错 Exception in thread "main" java.lang.NullPointerException
System.out.println(
s2.equals(s1)
);
// 空指针异常,可以使用java.util.Objects的equals方法,防止空指针异常 // 输出 false
System.out.println(
Objects.equals(s1, s2)
);
}
}
posted @   LeeHua  阅读(314)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航