Java知识速记 == 与equals

news2025/2/2 7:22:01

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.coloradmin.cn/o/2289680.html

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

相关文章

[Linux]从零开始的STM32MP157 U-Boot移植

一、前言 在上一次教程中,我们了解了STM32MP157的启动流程与安全启动机制。我们还将FSBL的相关代码移植成功了。大家还记得FSBL的下一个步骤是什么吗?没错,就是SSBL,而且常见的我们将SSBL作为存放U-Boot的地方。所以本次教程&…

前端 | 深入理解Promise

1. 引言 JavaScript 是一种单线程语言,这意味着它一次仅能执行一个任务。为了处理异步操作,JavaScript 提供了回调函数,但是随着项目处理并发任务的增加,回调地狱 (Callback Hell) 使异步代码很难维护。为此,ES6带来了…

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接:21. 合并两个有序链表 - 力扣(LeetCode) 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…

C++ 字母大小写转换两种方法统计数字字符的个数

目录 题目: 代码1: 代码2: 题目: 大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。 输入格式 输入一行&#x…

终极版已激活!绿话纯净,打开即用!!!

今天我想和大家聊聊一个非常实用的工具——视频转换大师最终版。 视频转换大师终极版,堪称一款全能型的视频制作神器,集视频转换与编辑功能于一体。它搭载的视频增强器技术,能够最大限度地保留原始视频质量,甚至还能实现质量的进…

【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)

文章目录 【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序:6.2 编译和运行程序:6.3 在显示或更改文件的…

C++ strcpy和strcat讲解

目录 一. strcpy 代码演示: 二.strcat 代码演示: 一. strcpy 使⽤字符数组可以存放字符串,但是字符数组能否直接赋值呢? ⽐如: char arr1[] "abcdef"; char arr2[20] {0}; arr2 arr1;//这样这节赋值可…

STM32 01 LED

一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC;如果没有找到hex文件(在objects文件夹下),在keil中options for target-output- 勾选 create hex file。 如果要修改编程 :重新编译-下载/编程-单片机重…

【图床配置】PicGO+Gitee方案

【图床配置】PicGOGitee方案 文章目录 【图床配置】PicGOGitee方案为啥要用图床图床是什么配置步骤下载安装PicGoPicGo配置创建Gitee仓库Typora中的设置 为啥要用图床 在Markdown中,图片默认是以路径的形式存在的,类似这样 可以看到这是本地路径&#x…

AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言

1. 定义目标与需求 首先,要明确你希望AI智能体做什么。是自动化任务、数据分析、自然语言处理,还是其他功能?明确目标可以帮助你选择合适的技术和方法。 2. 选择开发平台与工具 开发AI智能体的软件时,你需要选择适合的编程语言、…

ArkTS语言介绍

文章目录 一、基本知识声明类型运算符语句函数函数声明可选参数Rest参数返回类型函数的作用域函数调用函数类型箭头函数(又名Lambda函数)闭包函数重载类字段方法构造函数可见性修饰符对象字面量抽象类接口接口属性接口继承抽象类和接口泛型类型和函数泛型类和接口泛型约束泛型…

基于 oneM2M 标准的空气质量监测系统的互操作性

论文标题 英文标题: Interoperability of Air Quality Monitoring Systems through the oneM2M Standard 中文标题: 基于 oneM2M 标准的空气质量监测系统的互操作性 作者信息 Jonnar Danielle Diosana, Gabriel Angelo Limlingan, Danielle Bryan Sor…

Flutter常用Widget小部件

小部件Widget是一个类,按照继承方式,分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件:lib/app/app.dart。 import package:flutter/material.dart;class App exte…

电路研究9.2.6——合宙Air780EP中HTTP——HTTP GET 相关命令使用方法研究

这个也是一种协议类型: 14.16 使用方法举例 根据之前多种类似的协议的相关信息: HTTP/HTTPS:超文本传输协议(HTTP)用于Web数据的传输,而HTTPS是HTTP的安全版本,使用SSL/TLS进行加密。与FTP相比&…

【力扣】283.移动零

AC截图 题目 思路 遍历nums数组,将0删除并计数,最后在nums数组尾部添加足量的零 有一个问题是,vector数组一旦erase某个元素,会导致迭代器失效。好在有解决办法,erase会返回下一个有效元素的新迭代器。 代码 class …

linux设置mysql远程连接

首先保证服务器开放了mysql的端口 然后输入 mysql -u root -p 输入密码后即可进入mysql 然后再 use mysql; select user,host from user; update user set host"%" where user"root"; flush privileges; 再执行 select user,host from user; 即可看到变…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中,向 addConstr 这个方法中传入一个 TempConstr 对象,在模型中就会根据这个对象生成一个约束。更重要的是:TempConstr 对象可以传给所有addConstr系列方法,所以下面先介绍 TempConstr 对象 TempConstr TempC…

【linux网络(4)】传输层协议详解(上)

目录 前言1. UDP协议报文详解2. TCP协议的报文格式3. TCP的确认应答机制4. TCP的连接管理机制1. TCP三次握手的过程2. TCP四次挥手的过程 5. 总结 前言 上一篇文章介绍了应用层中最重要的http协议,本篇文章将讲解传输层的两个协议: TCP和UDP. 由于UDP是一种简洁的协…

【esp32-uniapp】uniapp小程序篇02——引入组件库

一、引入组件库(可自行选择其他组件库) 接下来介绍colorUI、uview plus的安装,其他的安装可自行查找教程 1.colorUI weilanwl/coloruicss: 鲜亮的高饱和色彩,专注视觉的小程序组件库 下载之后解压,将\coloruicss-ma…

【机器学习】自定义数据集,使用scikit-learn 中K均值包 进行聚类

一、K 均值算法简介 K 均值算法的目标是将数据集划分为 K 个簇,使得每个数据点属于离它最近的簇中心(centroid)所代表的簇。 K均值聚类算法步骤 ① 初始化: 随机选择原始数据的K个数据点作为初始质心(聚类中心&…