• == 和 equals 的区别


    😀前言
    我们首先介绍了==运算符,它主要用于比较对象的引用地址。我们明确了它适用于基本数据类型和引用类型,以及其默认行为。然后,我们详细讨论了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;
        }
    }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    ## equals

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

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

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

      但是有下面代码可知

      public class Equals {
          public static void main(String[] args) {
      
              String str1 = "qqq";
              String str2 = "qqq";
              System.out.println(str1.equals(str2)); // true
      
          }
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      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;
          }
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
    
        @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;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    😄总结

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

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

    java基础合集

    数据库合集

    redis合集

    nginx合集

    linux合集

    手写机制

    微服务组件

    spring_尘觉

    springMVC

    mybits

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

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

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

  • 相关阅读:
    Android 打开通知中心(StatusBar)
    vue - 路由守卫
    【LeetCode】148. 排序链表
    03【深度学习】YOLOV3-WIN11环境搭建(配置+训练)
    使用Django开发一款竞争对手产品监控系统
    《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL
    如何保留 Excel 表头和第一行数据并追加 CSV 数据
    蓝桥杯每日一题2023.10.26
    【学习Redis】- Redis命令行、命令返回值、配置
    Hadoop3教程(一):Hadoop的定义、组成及全生态概览
  • 原文地址:https://blog.csdn.net/apple_67445472/article/details/133079252