java的==运算符和equals详解

①chatgpt的解释

  • 在Java中,==和equals都是用于比较两个对象的操作符,但它们的行为和用途有所不同。

    1. ==操作符:

      • 对于基本数据类型,比较的是它们的值是否相等。例如,int a = 5; int b = 5; System.out.println(a == b); // 输出true

      • 对于引用类型,比较的是它们的引用是否相等,即是否指向同一个对象。例如,String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2); // 输出true

      • 对于对象的比较,如果没有重写equals方法,默认使用的也是==操作符进行比较。

    2. equals方法:

      • equals方法是Object类中定义的方法,用于比较两个对象是否相等。默认情况下,equals方法和==操作符的行为相同,即比较的是两个对象的引用是否相等。

      • 但是,equals方法可以被子类重写,以实现自定义的相等比较逻辑。通常情况下,我们需要重写equals方法来比较对象的内容是否相等,而不仅仅是比较引用是否相等。

      • 重写equals方法时,通常还需要重写hashCode方法,以保证对象在放入哈希表等数据结构时的正确性。

    需要注意的是,对于基本数据类型,使用==操作符进行比较是安全的。但对于引用类型,特别是自定义的类,通常需要使用equals方法来比较对象的内容是否相等。在使用equals方法时,需要注意遵循以下几个原则:

    • 自反性:x.equals(x)应该返回true。

    • 对称性:如果x.equals(y)返回true,那么y.equals(x)也应该返回true。

    • 传递性:如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。

    • 一致性:多次调用x.equals(y)应该返回相同的结果,前提是对象没有被修改。

    • 非空性:x.equals(null)应该返回false。

②Object常用类

  1. equals(Object obj)方法:

    • 用于比较两个对象是否相等。

    • 默认情况下,使用的是==操作符进行比较,即比较两个对象的引用是否相等。

    • 通常需要在自定义的类中重写equals方法,以实现自定义的相等比较逻辑。

    • 重写equals方法时,通常还需要重写hashCode方法,以保证对象在放入哈希表等数据结构时的正确性。

  2. hashCode()方法:

    • 返回对象的哈希码值。

    • 哈希码值用于在哈希表等数据结构中快速定位对象。

    • 默认情况下,hashCode方法返回的是对象的内存地址的整数表示。

    • 重写equals方法时,通常也需要重写hashCode方法,以保证相等的对象具有相同的哈希码值。

  3. toString()方法:

    • 返回对象的字符串表示。

    • 默认情况下,返回的是对象的类名和哈希码值的组合,例如"ClassName@hashCode"。

    • 通常需要在自定义的类中重写toString方法,以返回自定义的字符串表示。

  4. getClass()方法:

    • 返回对象的运行时类。

    • 可以用于获取对象所属的类的信息,例如类名、包名等。

  5. clone()方法:

    • 创建并返回对象的一个副本。

    • 需要注意的是,该方法是浅拷贝,即只复制对象的引用,而不复制对象的内容。

    • 如果需要实现深拷贝,需要在自定义的类中重写clone方法,并在其中进行逐个成员变量的复制。

  6. finalize()方法:

    • 在对象被垃圾回收器回收之前调用。

    • 可以在子类中重写该方法以执行对象的清理操作,例如释放资源等。

  7. notify()和notifyAll()方法:

    • 用于在多线程环境下进行线程间的通信。

    • notify()方法唤醒在该对象上等待的一个线程,notifyAll()方法唤醒所有在该对象上等待的线程。

    • 这些方法必须在同步代码块或同步方法中调用,并且只能由持有该对象的锁的线程来调用。

  8. wait()方法:

    • 使当前线程进入等待状态,直到其他线程调用该对象的notify()或notifyAll()方法唤醒它。

    • 这个方法必须在同步代码块或同步方法中调用,并且只能由持有该对象的锁的线程来调用。

需要注意的是,Object类中的这些方法都是被protected修饰的,因此只能在子类中访问和使用。在实际开发中,我们通常会在自定义的类中重写equals、hashCode和toString方法,以满足具体的需求。

③==

==是一个比较运算符;

(1)如果判断基本类型,判断的是值是否相等;

(2)如果判断引用类型,判断的是地址是否相等,即判断是不是同一个对象;

④equals方法

(1)是一个方法,只能判断引用类型

(2)Object类的equals方法默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等;

⑤如何查看jdk源码:

在查看某个方法源码时,将光标放在该方法处,输入ctrl+b即可;或者是ctrl+左键    。    

⑥lang包

  • java.lang包是Java语言的核心包之一,它包含了Java语言的基本类和接口。这个包中的类和接口是Java程序开发中最常用的,因此它们不需要显式地导入就可以直接使用。

    以下是java.lang包中一些常用的类和接口:

    1. Object类:Object类是所有类的根类,它定义了一些通用的方法,如equals()、hashCode()、toString()等。

    2. Class类:Class类表示Java中的类和接口,它提供了一些方法来获取类的信息,如getName()、getSuperclass()、getInterfaces()等。

    3. String类:String类用于表示字符串,它提供了许多字符串操作的方法,如length()、charAt()、substring()等。

    4. StringBuilder和StringBuffer类:StringBuilder和StringBuffer类用于可变的字符串操作,它们提供了一系列方法来修改和操作字符串。

    5. Math类:Math类提供了一些数学运算的方法,如abs()、sqrt()、sin()等。

    6. System类:System类提供了与系统相关的一些方法,如获取当前时间、获取系统属性、标准输入输出等。

    7. Throwable类和Exception类:Throwable类是所有错误和异常的基类,Exception类是所有可检查异常的基类,它们提供了一些方法来处理错误和异常。

    8. Thread类和Runnable接口:Thread类和Runnable接口用于多线程编程,它们提供了创建和管理线程的方法。

    除了上述提到的类和接口,java.lang包还包含了一些其他的类和接口,如ClassLoader类、Enum类、Iterable接口等。这些类和接口提供了Java语言的基本功能和特性,是Java程序开发中不可或缺的一部分。由于java.lang包中的类和接口在Java程序中经常被使用,所以它们不需要显式地导入就可以直接使用。

  • 是的,String类是Object类的子类。在Java中,所有的类都直接或间接地继承自Object类。因此,String类继承了Object类的所有方法,如equals()、hashCode()、toString()等。同时,String类还提供了一些自己特有的方法,用于字符串的操作和处理。由于String类是Object类的子类,所以可以将String对象赋值给Object类型的变量,也可以将String对象作为参数传递给接受Object类型参数的方法。但需要注意的是,虽然String类继承了Object类的方法,但它对其中的一些方法进行了重写,以实现字符串的特定功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网穿透natapp使用教程(Linux)

我的使用场景:在家访问学校服务器,由于不在一个局域网,所以需要使用内网穿透,我使用的是natapp。需要在有局域网的时候做好以下步骤。 (natapp官网:https://natapp.cn/) 1. 下载客户端 &#x…

springboot入门2

学习目标: 了解数据库配置加密方法,数据库连接池,mybatis-paginationInterceptor分页,pagehelper分页常用功能 学习内容: 1、mybatis plus配置加密 1.1、生成加密配置 package sccba.example;import com.baomidou…

盲盒App小程序开发:引领未来购物新潮流

随着科技的不断发展,我们的购物方式也在不断改变。近年来,盲盒购物逐渐成为了一种新型的消费模式,受到了广大消费者的热烈欢迎。为了满足消费者的需求,越来越多的企业开始涉足盲盒App的开发。本文将探讨盲盒App开发的意义、前景以…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕

上一篇:[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

【GitHub项目推荐--国外名校AI教程】【转载】

这个开源项目搜集了 YouTube 上优质的机器学习教程,方向包括机器学习、深度学习、计算机视觉、自然语言处理、无监督学习等等。 开源地址:https://github.com/dair-ai/ML-YouTube-Courses

[260. 只出现一次的数字 III](C语言题解)(位运算)(力扣)

> Problem: [260. 只出现一次的数字 III](260. 只出现一次的数字 III - 力扣(LeetCode)) # 思路 > 想到数组中只有一个数只出现了一次的解法:**所有数异或,最后答案就是那个只出现一次的数**,该题只需将两个不…

Kubernetes成本优化

云原生可以帮助团队更精细化利用资源,但如果缺乏工具的帮助,很难采取适当的措施优化资源的使用。本文介绍了若干用于可视化Kubernetes资源使用情况的工具,并且可以自定义策略优化资源使用,实现更好的成本优化。原文: Kubernetes C…

《WebKit 技术内幕》学习之十五(5):Web前端的未来

5 Crosswalk项目 Crosswalk项目是由英特尔公司发起的一个开源项目,该项目基于WebKit(Blink)和Chromium等开源项目打造,其目的是提供一个跨不同操作系统的Web运行环境,包括Android、Tizen、Linux、Windows、MacOS等众多…

python使用PaddleOCR实现《命名实体识别项目》OCR(已实现)(ai领域必看,简单易用)

1.简介: PaddleOCR是飞桨(PaddlePaddle)推出的一个端到端的光学字符识别开源工具集,支持中文、英文、数字以及特殊符号等各种类型的文字检测、识别和词语整体识别。该工具集使用PaddlePaddle深度学习框架技术,提供了多…

Likeshop多商户商城源码系统,支持二开

在电商行业高速发展的当下,拥有一套功能强大、易于操作的开源商城系统至关重要。Likeshop多商户商城系统正是这样一款集H5、小程序、独立APP于一体的开源电商解决方案,助力商家实现智能营销。 一、产品简介 Likeshop多商户商城系统为商家提供了丰富的营…

Spring Boot 中 Service 层依赖注入问题

目录 问题描述 产生错误 问题原因 解决方法 手动注入方法 1、使用工具集 hutool,引入 Maven 依赖 2、编写 SpringUtil 工具类 问题描述 Controller 层方法为 static 静态,引入 Service 层时使用 Autowired 注解自动装配,Controller层方…

C#用 DateAndTime.DateAdd方法和DateTime.Add(TimeSpan) 方法分别添加一段时间间隔

目录 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔 2.用DateTime.Add方法添加一段时间间隔 二、实例 1.实例1:用 DateAndTime.DateAdd方法 2.实例2:用DateTime.Add方法 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔…

Android发展历程及安装

目录 发展历程 下载网址 安装过程 发展历程 安卓基于Linux内核,Linux内核相当于房屋的地基 开源不等于免费,不能商用 安卓一般每半年小更新,一年大更新 对应API相当于别名 现在安卓安全性越来越高,性能越来越快&#xff0c…

2024年预制菜行业市场发展趋势分析(2021-2023年预制菜行业数据分析)

近期,老干妈被称为预制菜、预制菜国标报送稿出炉等事件再次引起大众对于预制菜市场的讨论。随着国家对预制菜审核标准的严格化,预制菜市场未来走向将会如何?鲸参谋带大家从数据角度来了解。 首先来看下预制菜市场的行业发展情况。 根据鲸参…

蓝桥杯备赛 week 4 —— DP 背包问题

目录 🌈前言🌈: 📁 01背包问题 分析: dp数组求解: 优化:滚动数组: 📁 完全背包问题 📁 总结 🌈前言🌈: 这篇文章主…

大数据就业方向-(工作)ETL开发

上一篇文章: 大数据 - 大数据入门第一篇 | 关于大数据你了解多少?-CSDN博客 目录 🐶1.ETL概念 🐶2. ETL的用处 🐶3.ETL实现方式 🐶4. ETL体系结构 🐶5. 什么是ETL技术? &…

MySQL JSON数据类型全解析(JSON datatype and functions)

JSON(JavaScript Object Notation)是一种常见的信息交换格式,其简单易读且非常适合程序处理。MySQL从5.7版本开始支持JSON数据类型,本文对MySQL中JSON数据类型的使用进行一个总结。 目录 一、MySQL中的JSON 1.1 JSON数据格式 1.2 …

spring-boot-starter-validation常用注解

文章目录 一、使用二、常用注解三、Valid or Validated ?四、分组校验1. 分组校验的基本概念2. 定义验证组3. 应用分组到模型4. 在控制器中使用分组5. 总结 一、使用 要使用这些注解,首先确保在你的 Spring Boot 应用的 pom.xml 文件中添加了 spring-bo…

探秘Dmail:Web3世界的通讯引领者

摘要:在一个充满潜力并且对创新要求严格的领域中,Dmail作为一种开创性的Web3通讯协议应运而生。 1月24日,OKX Jumpstart宣布上线Dmail,在Web3领域引起了巨大反响,这是一个旨在重新定义数字通讯范式的富有远见的项目&a…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-1最优控制问题与性能指标 1. 最优控制问题与性能指标2. 动态规划 Dynamic Programming2.1 基本概念2.2 代码详解2.3 简单一维案例 3. 线性二次型调节器&#xff…