首页 > 编程语言 >深入剖析Java中的“==”与“equals”:不同之处及实践

深入剖析Java中的“==”与“equals”:不同之处及实践

时间:2024-03-23 22:58:24浏览次数:31  
标签:Java String 示例 equals idNumber Person new 不同之处

引言

比较在任何编程语言中都是基本操作,Java提供了“==”运算符和“equals()”方法进行比较,它们在比较对象时有着本质的区别。

“==”: 引用数据类型与基本数据类型比较

对于基本数据类型,如int、double等 “==”比较的是值本身。对于引用数据类型,如String、Arrays等,它比较的是两个对象的内存地址。

“equals()”

  • 默认equals()行为:如果没有覆写,其行为与“==”相同,比较对象的内存地址。
  • 覆盖equals():一般覆盖equals()方法来比较两个对象的内容是否相等。

String类中的equals()

String类的equals()方法已经是被重写过,它比较的是对象存储的值。String对象的创建涉及检查常量池是否存在相同值的对象。

Java代码示例

public class CompareExample {
    public static void main(String[] args) {
        // "==" 比较示例
        String s1 = new String("example");
        String s2 = new String("example");
        System.out.println(s1 == s2); // 输出 false,因为内存地址不同
        
        // 默认equals方法比较示例
        Integer num1 = new Integer(5);
        Integer num2 = new Integer(5);
        System.out.println(num1.equals(num2)); // 输出 true,值相等
        
        // 覆盖equals方法比较示例
        // 自定义类与equals方法的覆盖
        class Person {
            String idNumber;
            Person(String idNumber) {
                this.idNumber = idNumber;
            }
            @Override
            public boolean equals(Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;
                Person person = (Person) o;
                return idNumber.equals(person.idNumber);
            }
            // hashCode方法也应该一并被覆盖(本示例中省略)
        }
        
        Person p1 = new Person("123456789");
        Person p2 = new Person("123456789");
        System.out.println(p1.equals(p2)); // 输出 true,ID号相同
    }
}

总结

了解和应用"=="和"equals()"的正确场合是非常重要的,以确保程序的准确性和效率。在编写自定义类时,合理覆盖equals()方法同样十分关键。

标签:Java,String,示例,equals,idNumber,Person,new,不同之处
From: https://blog.csdn.net/m0_52172586/article/details/136977186

相关文章

  • Java 枚举(超详细讲解)
    Java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序的编程效率和质量。一、枚举事先考虑到某一变量可能的取值,尽可能用自然语言忠表意清楚的单词来表示它的每一个值,用这中思路定义的类型被称为枚举类型。枚举事由一组固定的常量组成的类型。在Java中每个枚......
  • foxy与galactic解析rosbag的不同之处
    前言foxy和galactic版本在rosbag2_storage这个包的调整有点大(头文件及接口的命名空间),下面的代码仅供参考使用foxy#include"db3_reader.h"#include<pcl/common/transforms.h>#include<pcl/point_types.h>#include<pcl_conversions/pcl_conversions.h>#include<rosba......
  • Java面试题:用Java并发工具类,实现一个线程安全的单例模式;使用Java并发工具包和并发框架
    面试题一:设计一个Java并发工具类,实现一个线程安全的单例模式,并说明其工作原理。题目描述:请设计一个Java并发工具类,实现一个线程安全的单例模式。要求使用Java内存模型、原子操作、以及Java并发工具包中的相关工具。考察重点:对Java内存模型的理解。对Java并发工具包的了......
  • JAVA面向对象高级三:内部类概述,成员内部类,静态内部类
            静态内部类:     局部内部类: ......
  • 基于java+springboot+vue实现的游戏账号估价交易平台(文末源码+Lw+ppt)23-555
    摘 要系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对游戏账号估价交易的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想,在游戏账号估价交易平台......
  • 基于java+springboot+vue实现的外卖平台系统(文末源码+Lw+ppt)23-568
    摘 要伴随着我国社会的发展,人民生活质量日益提高。于是对外卖平台系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套外卖平台系统,帮助商家进行菜品分类、菜品信息、订单等繁琐又重......
  • 基于java+springboot+vue实现的游戏账号估价交易平台(文末源码+Lw+ppt)23-555
    摘 要系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对游戏账号估价交易的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想,在游戏账号估价交易平台......
  • 基于java+springboot+vue实现的外卖平台系统(文末源码+Lw+ppt)23-568
     摘 要伴随着我国社会的发展,人民生活质量日益提高。于是对外卖平台系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套外卖平台系统,帮助商家进行菜品分类、菜品信息、订单等繁琐又......
  • 基于java+springboot+vue实现的健身房管理系统(文末源码+Lw+ppt)23-523
    摘 要健身房管理的以往工作流程繁杂、多样、管理复杂与设备维护繁琐。而如今计算机已完全能够胜任健身房管理工作,而且更加准确、方便、快捷、高效、清晰、透明,它完全可以克服以上所述的不足之处。这将给查询信息和管理带来很大的方便,从而给健身房管理者带来更高的效率,这也是......
  • 配置vscode运行Java与更好的编写markdown文档
    下载vscode官网选择下载版本,根据自己的需求选择,蓝色的stable版本是非常稳定的发行版本,绿色的insiders版本是测试版,可能会有一点小bug安装完成以后第一步当然是让我们的vscode变成中文需要安装以下插件插件名称:Chinese(Simplified)(简体中文)LanguagePackforVisua......