Java中Object用法详解

Java中Object用法详解

什么是Object

Object是Java中所有类的基类,它包含了通用的属性和方法,所有Java类都继承自Object类。因此,Object是Java中最基本、最通用的一种类型。

public class MyClass {
    // ...
}

上面的代码中,虽然没有显式地继承Object类,但MyClass类默认继承了Object类。

Object类的常用方法

equals方法

equals方法用来判断两个对象是否相等。Object类中的equals方法默认实现和"=="操作符相同,即比较两个对象的引用地址。如果想要自己定义相等的比较规则,可以在自定义的类中重写equals方法。

public class Person {
    private String name;
    private int age;

    // ...

    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类的equals方法,来比较两个Person对象是否相等。如果Person对象的name和age属性都相等,那么这两个对象就相等。

hashCode方法

hashCode方法用来返回对象的哈希值,并且哈希值相等的对象不一定相等。如果自定义的类重写了equals方法,那么也应该重写hashCode方法,以保证相等的对象拥有相同的哈希码。

public class Person {
    private String name;
    private int age;

    // ...

    public int hashCode() {
        return Objects.hash(name, age);
    }
}

上面的代码中,我们重写了Person类的hashCode方法,来生成这个类实例的哈希码。这里我们借助了Objects类的静态方法hash()来自动生成哈希码,从而避免手动实现哈希函数。

示例

示例1:使用equals比较两个对象

public class App {
    public static void main(String[] args) {
        Person p1 = new Person("Tom", 20);
        Person p2 = new Person("Tom", 20);

        System.out.println(p1.equals(p2)); // true
    }
}

上面的代码中,我们定义了两个Person对象p1和p2,他们的name和age属性都相同。因此,我们调用p1.equals(p2)返回的结果是true。

示例2:自动生成哈希码

public class App {
    public static void main(String[] args) {
        Person p1 = new Person("Tom", 20);
        Person p2 = new Person("Tom", 20);

        System.out.println(p1.hashCode()); // 1062658129
        System.out.println(p2.hashCode()); // 1062658129
    }
}

上面的代码中,我们打印出了p1和p2的哈希码。由于p1和p2的name和age属性都相同,因此它们的哈希码应该相同。

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

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

相关文章

  • JAVA LinkedList和ArrayList的使用及性能分析

    JAVA LinkedList和ArrayList的使用及性能分析 1.介绍 在JAVA中,LinkedList和ArrayList都是常见的集合类。两种集合类都可以实现List接口,用于存储一组有序的数据。但是,它们在内部实现、性能以及使用场景上存在很大的差异。 LinkedList使用链表来实现,每一个节点都存储了当前元素的值和下一个节点的地址。由于链表…

    Java 2023年5月26日
    00
  • Java实现批量向mysql写入数据的方法

    当需要向mysql中插入大批量数据时,通过Java程序向数据库逐一插入会比较慢,而批量插入可以提高插入效率。下面就讲解一下如何Java实现批量向mysql写入数据的方法。 1. 准备工作 在开始之前,需要先检查好已经安装好了Mysql的Java驱动,可以在官网下载或在maven中引入即可。 另外,在写程序之前,需要先创建一个mysql表,以下示例代码将插入数…

    Java 2023年5月20日
    00
  • 详解SpringBoot优雅编码之Lombok加持

    详解SpringBoot优雅编码之Lombok加持 Lombok是什么? Lombok是一个Java库,可以通过注解的方式为Java类自动生成Guava、Apache Commons、java.util等常用类的方法,以达到减少冗长的Java代码的目的。 在Spring Boot中使用Lombok的示例 1. 引入Lombok依赖 在pom.xml文件中加入…

    Java 2023年5月19日
    00
  • 详解Spring如何整合Mybatis

    下面我会详细讲解如何整合Spring和MyBatis的攻略,包括必要的配置和示例。 一、添加依赖 首先需要在pom.xml中添加以下依赖: <!– Spring –> <dependency> <groupId>org.springframework</groupId> <artifactId>…

    Java 2023年5月19日
    00
  • 初识MyBatis及基本配置和执行

    MyBatis 是一款开源的持久层框架,它支持自定义 SQL、存储过程以及高级映射。在这里介绍如何初识 MyBatis 并配置基本环境,还有执行一些基本的操作。 一、初识MyBatis MyBatis 是一款持久层框架,因为它能将程序中的 Java 对象映射到数据库中的表,从而让你可以使用类似于面向对象的思想来管理数据。在这里我们将使用 MyBatis SQ…

    Java 2023年5月20日
    00
  • Java 创建线程的3种方法及各自的优点

    下面我将为您详细讲解“Java 创建线程的3种方法及各自的优点”的完整攻略。 Java 创建线程的3种方法及各自的优点 在Java中,创建线程有三种常用的方法,分别为继承Thread类、实现Runnable接口和实现Callable接口。各自的优点如下: 继承Thread类 继承Thread类创建线程是最简单的方法,只需要重写Thread类的run方法即可。…

    Java 2023年5月18日
    00
  • JSP中使用JSTL按不同条件输出内容的方法

    下面我将详细讲解JSP中使用JSTL按不同条件输出内容的方法的完整攻略。 1. 什么是 JSTL? JavaServer Pages (JSP) 标准标记库(英文全称为:JavaServer Pages Standard Tag Library,简称为JSTL)是SUN公司内部开发的一套在JSP中使用的JSP标准标签库,它封装了JSP应用的通用核心功能,便于…

    Java 2023年6月15日
    00
  • Java多线程Condition接口原理介绍

    下面是对于Java多线程Condition接口的原理介绍: Condition接口是什么? 在Java中,我们可以使用synchronized、wait()、notify()、notifyAll()等来进行线程同步和通信。而条件对象(Condition)是在Java 5中新增的,它可以更加灵活地控制线程的等待和唤醒,提供了更高级、更安全、更灵活的线程同步方式…

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