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 Spring Boot 集成Zookeeper

    Java Spring Boot 集成 Zookeeper Zookeeper是一个分布式协调服务,它可以用于管理和协调分布式应用程序。在本文中,我们将详细讲解如何在Java Spring Boot应用程序中集成Zookeeper,包括如何安装和配置Zookeeper,如何使用Zookeeper进行服务发现和配置管理等。 安装和配置Zookeeper 在使用…

    Java 2023年5月15日
    00
  • Mac下安装配置Maven并在IDEA中配置的详细教程

    下面是Mac下安装配置Maven并在IDEA中配置的详细教程。 安装Maven 下载Maven 在Maven官网下载页面中,选择合适的Maven版本进行下载(https://maven.apache.org/download.cgi)。目前最新版本为3.8.3。 解压Maven安装包 解压下载下来的Maven安装包,将其中的文件解压到本地目录。可以在终端输入…

    Java 2023年5月20日
    00
  • Java基础之详细总结五种常用运算符

    Java基础之详细总结五种常用运算符 Java中常见的运算符有很多种,包括算术运算符、关系运算符、逻辑运算符、位运算符等等,其中五种最为常用,本文将对这五种常用运算符进行详细总结和介绍。 算术运算符 算术运算符是Java中最基本的一类运算符,用于进行加、减、乘、除等基本的数学运算。Java中的算术运算符包括加号(+)、减号(-)、乘号(*)、除号(/)和取模…

    Java 2023年5月26日
    00
  • java版十大排序经典算法:完整代码(4)

    下面是详细讲解 “java版十大排序经典算法:完整代码(4)” 的攻略。 1. 前言 “java版十大排序经典算法” 系列文章是介绍常见排序算法的一系列文章,本篇为第四篇,主要介绍了 希尔排序、归并排序、快速排序这三个经典算法的 Java 代码实现。 2. 希尔排序 希尔排序是基于插入排序的一种高效的排序算法,也称“缩小增量排序”。利用增量序列将数组分成多个…

    Java 2023年5月19日
    00
  • jsp如何获取Session中的值

    要获取Session中的值,需要通过JSP内置对象session来实现。下面是详细步骤: 1.在JSP中获取Session对象 要在JSP中获取Session对象,可以直接使用内置对象session。代码如下: <% HttpSession session = request.getSession(); %> 其中,request是另一个内置对象…

    Java 2023年6月15日
    00
  • Java实战之小蜜蜂扩音器网上商城系统的实现

    Java实战之小蜜蜂扩音器网上商城系统的实现攻略 1. 系统设计 本商城系统主要分为以下几个模块: 用户管理模块 商品管理模块 购物车模块 订单管理模块 支付模块 使用了SpringMVC框架、Spring框架和MyBatis框架。 用户管理模块 用户管理模块采用了简单的登录和注册功能,用户可通过注册页面注册账号,在登录页面登录账号。登录成功后,用户可访问其…

    Java 2023年5月19日
    00
  • Spring Data JPA分页复合查询原理解析

    Spring Data JPA分页复合查询原理解析 在使用 Spring Data JPA 的过程中,分页和复合查询是经常用到的功能。本文将详细讲解 Spring Data JPA 分页和复合查询的原理,同时给出两个示例进行演示。 分页原理 Spring Data JPA 的分页功能基于 Spring Framework 的 PagingAndSorting…

    Java 2023年5月20日
    00
  • Java如何提供给第三方使用接口方法详解

    Java提供给第三方使用接口方法是指使用Java编写一个库,供其他开发者在自己的项目中使用,这个库就是接口。接口提供了一种标准化、规范化的编程方法,让编写代码变得更加高效和可维护。 下面是Java提供给第三方使用接口方法的详细攻略: 1.编写接口类: 接口是一种抽象的数据类型,它只有方法声明,没有方法体。接口用于定义某种功能的标准,而不关心这个功能的具体实现…

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