当前位置: 首页 > article >正文

Java知识速记 == 与equals

Java知识速记 == 与equals

1. ==操作符概述

==操作符用于比较基本数据类型的值,或者比较引用类型的对象是否指向同一内存地址。对于基本数据类型,例如int、float等,==会比较其值;但对于对象,==只会比较两个对象的引用,判断它们是否是同一个对象。

示例

int a = 5;
int b = 5;
System.out.println(a == b); // 输出:true

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 输出:false

在这个例子中,虽然str1str2内容相同,但它们是不同的对象,因此==比较返回false

2. equals方法概述

equals()是Java中所有对象的一个方法,定义在Object类中。默认情况下,equals()方法和==操作符的功能相似,比较对象的引用。但可以通过重写equals()方法来自定义对象的相等性比较。这种重写通常用于判断内容的相等性,例如StringInteger等。
示例

String str3 = new String("Hello");
String str4 = new String("Hello");
System.out.println(str3.equals(str4)); // 输出:true

在这个例子中,由于String类重写了equals()方法,所以两个字符串的内容得以比较,返回true

3. 结合具体实例的比较

3.1 比较基本数据类型

对于基本数据类型,==equals()是相同的:

int x = 10;
int y = 10;
System.out.println(x == y); // 输出:true

3.2 比较对象引用

对于对象引用,==只比较内存地址,equals()如果未重写则比较内存地址:

Integer int1 = new Integer(100);
Integer int2 = new Integer(100);
System.out.println(int1 == int2); // 输出:false
System.out.println(int1.equals(int2)); // 输出:true

虽然这两者的值相同,但是因为它们是在堆内存中不同的对象,==返回false,而equals()返回true

3.3 自定义对象的比较

当定义一个自定义类时,重写equals()方法是判断对象相等性的关键:

class Person {
    String name;
    int age;

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

    @Override
    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 && name.equals(person.name);
    }
}

Person p1 = new Person("Alice", 30);
Person p2 = new Person("Alice", 30);
System.out.println(p1 == p2); // 输出:false
System.out.println(p1.equals(p2)); // 输出:true

在这个自定义Person类的例子中,equals()被重写以比较nameage两个属性,使得即使p1p2是不同的引用,它们在逻辑上依然被认为是相等的。


http://www.kler.cn/a/529216.html

相关文章:

  • Ruby 模块(Module)
  • deepseek v1手机端部署
  • FastAPI 多语言国际化实现:支持25种语言的博客系统
  • 【Java异步编程】CompletableFuture综合实战:泡茶喝水与复杂的异步调用
  • 如何在Windows、Linux和macOS上安装Rust并完成Hello World
  • 【13】WLC HA介绍和配置
  • 截止到2025年2月1日,Linux的Wayland还有哪些问题是需要解决的?
  • 群晖搭建Gitea教程(使用系统自带的postgresql)
  • 用 JavaScript 打造交互式表格:添加与删除行功能
  • Linux文件类型
  • 台账思维和GIS思维在资产管理中的不同模式
  • 深度学习推理的整数量化:原理与实证评估
  • 知识管理系统推动企业知识创新与人才培养的有效途径分析
  • 【玩转全栈】--创建一个自己的vue项目
  • 海外问卷调查之渠道查,企业经营的指南针
  • C语言指针专题五 -- void和const指针
  • 【力扣】15.三数之和
  • 网络编程套接字(下)
  • CSS 样式化表格:从基础到高级技巧
  • 快速提升网站收录:利用网站FAQ页面
  • 人工智能入门课【手写自注意力机制】
  • 【回溯】目标和 字母大小全排列
  • 云服务器与Docker
  • 分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置
  • 【华为OD-E卷 - 报数游戏 100分(python、java、c++、js、c)】
  • doris:JSON导入数据