== 和 equals 的区别

2023-09-20 14:36:31

😀前言
我们首先介绍了==运算符,它主要用于比较对象的引用地址。我们明确了它适用于基本数据类型和引用类型,以及其默认行为。然后,我们详细讨论了equals方法,它是一个方法,通常用于比较对象的内容。我们强调了需要在自定义类中重写equals方法以便实现对象内容的比较,同时提到了一些重写equals方法时需要遵循的约定

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

== 和 equals 的区别

## ==

对于基本数据类型,比较"实体值"

注意,不同类型也可以比较,但是等号两边的类型必须转化为相同

对于引用类型的变量比较的是在堆空间的地址值

基本数据类型运算时boolean类型不参与

public class EqualsTest {
    public static void main(String[] args) {

        // 基本数据类型
        int i = 10;
        int j = 10;
        System.out.println(i == j);// true
        char c1 = 10;
        System.out.println(c1 == i); // true
        boolean b = true;
        // System.out.println(b == i); //报错
        char c2 = 65;
        char c3 = 'A';
        System.out.println(c2 == c3); // true
        System.out.println(c2 == 65); //true

        // 引用数据类型

        Customer cus1 = new Customer(12, "lihua");
        Customer cus2 = new Customer(12, "lihua");
        System.out.println(cus1 == cus2); // false 因为这是在堆中new了两个对象,所以地址值不相同

    }
}
class Customer {
    int age;
    String name;

    public Customer() {

    }

    public Customer(int age, String name) {
        this.age = age;
        this.name = name;
    }
}



## equals

  1. 首先, 它是一个方法 所以对于基本类的变量无法调用, 只能适用于引用数据类型.

  2. 在源码中的定义为
    
    public boolean equals(Object obj) {
            return (this == obj);
        }
    

    说明在object类中的equals和== 一样.

    但是有下面代码可知

    public class Equals {
        public static void main(String[] args) {
    
            String str1 = "qqq";
            String str2 = "qqq";
            System.out.println(str1.equals(str2)); // true
    
        }
    }
    
    

    String 中equals方法被重写(顺便一提IDEA生成equa的快捷键是Alt + insert)

    同样被重写过得还有String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地 址是否相同,而是比较两个对象的实体内容是否相同。

  3. 重写equals方法

    public class EqualsTest {
        public static void main(String[] args) {
    
            Customer cus1 = new Customer(12, "lihua");
            Customer cus2 = new Customer(12, "lihua");
            System.out.println(cus1.equals(cus2)); //true
    
        }
    }
    class Customer {
        private int age;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private String name;
    
        public Customer() {
    
        }
    
        public Customer(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
    
    

    @Override
    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj instanceof Customer) {
            Customer cus = (Customer) obj;
            return cus.getName().equals(this.name) && cus.getAge() == this.age;
        }
        return false;
    }

}

😄总结

==和equals在Java中扮演着不同的角色。==用于比较引用地址,而equals用于比较对象的内容。了解它们之间的区别以及在何种情况下使用它们是成为一名优秀Java开发者的关键。通过正确地使用这两者,您可以确保在编写Java应用程序时获得预期的行为,并避免因对象比较引发的潜在错误

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

更多推荐

阿里云ACP认证备考指南,赶紧收藏!

新技术更新迭代,后浪追逐,前浪内卷。唯有硬技能才能助你在职场乘风破浪。作为技术人,该如何有效的提高职场竞争力呢?而证书是一种能非常有效证明自己能力的东西,不仅能够提高简历通过率,为你的面试加分,还可以为你的升职加薪提高筹码,通过考证去提升自己,真的是一种性价比很高的方式。阿里云ACP认证专业工程师考试是当前比较热门的一

(WRF/Chem)在大气环境领域实践技术应用

随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球的。本地的污染物排放

百度ERNIE 3.0——中文情感分析实战

目录前言一、百度ERNIE3.0二、使用ERNIE3.0中文预训练模型进行句子级别的情感分析2-1、环境2-2、数据集加载2-3、加载预训练模型和分词器2-4、基于预训练模型的数据处理2-5、数据训练和评估2-6、模型验证2-7、情感分析结果的预测以及保存三、自定义个人案例3-1、如何自定义数据集总结前言ERNIE(E

Linux Tips 04

文章目录一、文件系统的简单操作列出文件系统的整体磁盘使用量查看文件系统的磁盘使用量(常用在查看目录所占磁盘空间)硬链接观察磁盘分区状态磁盘分区文件系统挂载与卸载一、文件系统的简单操作列出文件系统的整体磁盘使用量列出文件系统的整体磁盘使用量df[-ahikHTm]目录或文件名-a列出所有的文件系统-kKBytes容量显示

windbg调试句柄问题

这里写自定义目录标题winform,句柄资源不够强,程序crash句柄主程序c++程序,加载的插件是c#dll,这时候如何用windbg调试dll库如果查看句柄和对象的关系!handle怎么能知道哪个句柄是Form对话框的句柄如何查看句柄对应的类对象winform,句柄资源不够强,程序crashWinForm中句柄资源

如何应对软件项目中的变化

软件研发管理中,变化是常态,如何应对变化,及时解决不利因素至关重要。它可以帮助企业适应市场需求、提高竞争力和软件质量、及时降低风险,增强团队合作。如果不能及时适应开发中的变化,不能及时调整项目计划和资源分配来适应变化,项目可能无法按时完成,导致额外的开销和资源浪费等问题。应对软件项目中的变化因此,我们需要采取策略及时应

物料主数据的建设过程分享

一、什么是物料1.1物料的定义物料主数据包含了对所有企业所采购、生产和存储在库存中物料的集中描述。它是企业中有关物料信息的物料数据代码库。将所有的物料数据集成在单一的物料数据库中,消除了数据冗余的问题,而且不仅允许采购部门使用这些数据,其他应用部门也可以使用这些数据。物料主数据贯穿于制造型企业的各个环节,企业的物流、信

我的C#基础

usingSystem;namespaceHelloWorldApplication}@TOC欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。为帮助您在CSDN创作的文章获得更多曝光和关注,我们为您提供了专属福利:已注册且未在CSDN平台发布过文章的用户,9月1日—9月30日期

MySQL 主从复制与读写分离

1、主从复制与读写分离1.1什么是读写分离读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。1.2为什么要读写分离因为数据库的“写”(写10000条数据可能要3分钟)操作

2023_Spark_实验十二:Spark高级算子使用

掌握Spark高级算子在代码中的使用相同点分析三个函数的共同点,都是Transformation算子。惰性的算子。不同点分析map函数是一条数据一条数据的处理,也就是,map的输入参数中要包含一条数据以及其他你需要传的参数。mapPartitions函数是一个partition数据一起处理,也即是说,mapPartit

java23种设计模式与追MM

1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新

热文推荐