Java基础之Object类详解

Java基础之Object类详解

Java中的Object类是所有Java类的祖先类,每个类都继承了Object类的一些方法。在本文中,我们将深入学习Object类,包括其方法以及如何正确重写Object类中的方法。

Object类中的方法

Object类提供了许多有用的方法,如下所示:

equals方法

equals方法用于比较两个对象是否相等,默认情况下,它会比较两个对象的内存地址是否相同,实际开发中,我们需要重写equals方法,以便比较我们关心的对象属性是否相等。

示例1:比较两个字符串是否相等

String s1 = "hello";
String s2 = "hello";
if(s1.equals(s2)){
    System.out.println("s1和s2相等");
}

示例2:比较两个自定义对象是否相等

class Person{
    private String name;
    private int age;
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }
}
Person p1 = new Person("张三", 20);
Person p2 = new Person("张三", 20);
if(p1.equals(p2)){
    System.out.println("p1和p2相等");
}

hashCode方法

hashCode方法用于获取对象的哈希值,哈希值由对象的内存地址计算而得,通常用于散列表中。

示例1:获取字符串的哈希值

String s = "hello";
int hashCode = s.hashCode();
System.out.println("字符串hello的哈希值为:" + hashCode);

toString方法

toString方法返回对象的字符串表示,通常用于调试和日志记录。

示例1:打印字符串对象

String s = "hello";
System.out.println(s.toString());

getClass方法

getClass方法返回对象所属的Class对象,我们可以利用Class对象进行反射操作。

示例1:获取字符串的Class对象

String s = "hello";
Class<? extends String> aClass = s.getClass();
System.out.println("字符串hello所属的Class对象是:" + aClass.getName());

重写Object类中的方法

在开发中,我们有时需要比较两个自定义对象是否相等,而不是简单地比较它们的内存地址;有时我们需要自定义哈希计算方法;有时我们需要自定义字符串表示等。这时,我们需要重写Object类中的一些方法。

重写equals方法

示例1:比较两个自定义对象是否相等

class Person{
    private String name;
    private int age;
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }
}
Person p1 = new Person("张三", 20);
Person p2 = new Person("张三", 20);
if(p1.equals(p2)){
    System.out.println("p1和p2相等");
}

在重写equals方法时,应该注意以下几点:

  1. equals方法必须满足自反性、对称性、传递性和一致性。
  2. equals方法传入的参数类型应该是Object类型,而不是自定义类型。
  3. equals方法应该比较所有关键字段,通常需要使用Objects.equals方法进行比较。

重写hashCode方法

示例1:自定义哈希计算方法

class Person{
    private String name;
    private int age;
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
Person p1 = new Person("张三", 20);
int hashCode = p1.hashCode();  
System.out.println("自定义哈希值为:" + hashCode);

在重写hashCode方法时,应该注意以下几点:

  1. 如果重写了equals方法,就必须同时重写hashCode方法。
  2. hashCode方法应该返回一个整数,通常使用Objects.hash方法计算哈希值。

重写toString方法

示例1:自定义字符串表示

class Person{
    private String name;
    private int age;
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
Person p1 = new Person("张三", 20);
System.out.println(p1.toString());

在重写toString方法时,应该注意以下几点:

  1. toString方法应该返回一个字符串,通常包含对象中所有关键字段的字符串表示。
  2. 不要在toString方法中调用其他方法,避免出现死循环。

总结

Object类是Java中最基础、最重要的一类,掌握Object类中的方法和重写方法,是Java编程的基本功。在实际开发中,我们需要根据不同的情况,正确使用Object类中的方法和重写方法,以获得更好的程序效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之Object类详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 详解Java编程中线程同步以及定时启动线程的方法

    下面是详解Java编程中线程同步以及定时启动线程的方法的完整攻略。 一、线程同步 在Java中,线程同步是控制多个线程访问共享资源的一种方式,主要是通过使用锁来实现的。Java中提供了两种锁来实现线程同步,分别是 synchronized 关键字和 ReentrantLock 类。 1. synchronized synchronized 是Java中最基本…

    Java 2023年5月20日
    00
  • Java面向对象基础知识之枚举

    Java面向对象基础知识之枚举 简介 在Java语言中,枚举类型是一种特殊的类,它是一组有限的值的集合,这些值是事先确定好的,称为枚举常量。枚举类型用来表示那些具有固定数量、固定名称的数据类型。 基本语法 在Java中,枚举类型定义时需要使用enum关键字,基本语法如下: enum 枚举名称 { 枚举常量1, 枚举常量2, … 枚举常量n } 其中,枚举…

    Java 2023年5月26日
    00
  • C#结合数据库实现验证识别ID卡内容的方法

    C#结合数据库实现验证识别ID卡内容的方法 实现一种基于C#语言和数据库的ID卡内容验证识别方法,能够方便地对ID卡进行读取、保存、查询、验证等操作,可以提高办公自动化、信息管理和安全性水平。下面将分别介绍实现步骤、示例代码和注意事项。 实现步骤 建立数据库 使用Microsoft SQL Sever等数据库软件,创建一个名为IDCardInfo的数据库。新…

    Java 2023年5月19日
    00
  • 教你如何使用Java输出各种形状

    如何使用Java输出各种形状 本文将介绍如何使用Java语言输出多种形状,包括矩形、三角形和菱形等。通过学习本文,您将了解到Java中输出各种形状的方法及实例。 矩形 矩形是最简单的图形之一,我们可以使用Java的for循环输出一个指定宽度和高度的矩形。以下是代码示例: // 输出一个5行4列的矩形 int width = 4; int height = 5…

    Java 2023年5月26日
    00
  • application对象统计所有用户对某网页的访问次数

    要统计所有用户对某网页的访问次数,可以使用应用程序(Application)对象。以下是进行这项任务的攻略: 步骤一:创建计数器 要跟踪访问次数,我们需要一个计数器。使用应用程序对象中的 OnStart 事件和 Application.Lock 方法创建一个计数器并将其初始化为1。然后使用 Application.UnLock 方法解锁应用程序对象。 Sub…

    Java 2023年6月15日
    00
  • java用静态工厂代替构造函数使用方法和优缺点

    Java中使用静态工厂代替构造函数是一种常见的编程方式。在这种方法中,不直接使用构造函数来创建新实例,而是在一个静态方法中创建实例并返回。接下来详细讲解Java用静态工厂代替构造函数使用方法和优缺点: 静态工厂的使用方法 使用Java静态工厂的基本方法是创建一个静态方法。在这个静态方法中,创建和返回一个新的对象实例,而不是直接调用构造函数。通常情况下,静态方…

    Java 2023年5月26日
    00
  • SpringMVC如何访问WEB-INF jsp过程解析

    访问WEB-INF目录下的jsp页面是一种常用的安全措施,SpringMVC框架也提供了相应的访问方式。 首先,在SpringMVC的配置文件(一般为xml文件)中配置ViewResolver,用于解析jsp视图。配置方式如下: <bean class="org.springframework.web.servlet.view.Interna…

    Java 2023年6月15日
    00
  • 浅谈Spring Data Redis读不到设进去的值

    针对“浅谈Spring Data Redis读不到设进去的值”的问题,我整理了以下攻略,希望可以帮到您。 问题描述 在使用Spring Data Redis操作Redis时,发现虽然可以成功地将值设进去,但是在读取的时候却无法读取到。 原因分析 Redis中的key过期 Redis有可能设置了自动过期,导致读取不到之前存储在Redis中的值。可以通过ttl命…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部