Java中 ==、equals() 、equalsIgnoreCase() 和compareTo() 方法对比详解

news2024/11/24 19:50:31

目录

== 运算符

equals() 方法

equalsIgnoreCase() 方法

compareTo() 方法

对比总结


== 运算符

== 运算符是Java中用于比较两个操作数是否相等的运算符。它可以用于比较基本数据类型和对象类型。

1、对于基本数据类型:== 比较的是两个操作数的值是否相等。如果两个操作数的值相等,则返回 true,否则返回 false。

public class main {

    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");
        System.out.println(str1 == str2); // false

        String str3 = str1;
        System.out.println(str1 == str3); // true

    }
}

2、对于对象类型:== 比较的是两个操作数的引用地址是否相等,即它们是否引用同一个对象。如果两个操作数引用同一个对象,则返回 true,否则返回 false。

public class main {

    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");
        System.out.println(str1 == str2); // false

        String str3 = str1;
        System.out.println(str1 == str3); // true

    }
}

总结:

  • == 运算符用于比较操作数的值(对于基本数据类型)或引用地址(对于对象类型)是否相等。
  • 对于基本数据类型,比较的是它们的值。
  • 对于对象类型,比较的是它们的引用地址,即是否引用同一个对象。

equals() 方法

equals() 方法是Java中用于比较两个对象内容是否相等的方法。它是Object类中定义的方法,因此所有的Java类都继承了这个方法。默认情况下,equals() 方法与== 运算符的行为相同,比较的是两个对象的引用地址。

然而,很多类会重写equals() 方法以实现自定义的相等比较逻辑。例如,String类、Integer类等都重写了equals() 方法来比较对象的内容而不是引用地址。

equals() 方法的通用语法如下:

public boolean equals(Object obj) {
    // 相等比较逻辑的实现
}

在重写equals() 方法时,通常需要满足以下几个原则:

  • 自反性:对于任意非空引用值x,x.equals(x) 应该返回true。
  • 对称性:对于任意非空引用值x 和 y,如果x.equals(y) 返回true,那么 y.equals(x) 也应该返回true。
  • 传递性:对于任意非空引用值x、y 和 z,如果x.equals(y) 返回true,并且y.equals(z) 也返回true,那么x.equals(z) 也应该返回true。
  • 一致性:对于任意非空引用值x 和 y,多次调用x.equals(y) 应该始终返回相同的结果。
  • 非空性:对于任意非空引用值x,x.equals(null) 应该返回false。

以下是一个示例,展示了如何重写equals() 方法:

public class Person {
    private String name;
    private int age;

    public 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);
    }

    public static void main(String[] args) {
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Alice", 25);
        Person person3 = new Person("Bob", 30);

        System.out.println(person1.equals(person2)); // true
        System.out.println(person1.equals(person3)); // false
    }
}

在上述示例中,我们重写了equals() 方法来比较Person类的两个对象。我们自定义了相等比较的逻辑,即如果两个对象的name 和 age 相等,则认为它们相等。尽管person1 和 person2 是两个不同的对象,但由于它们的内容相等,因此调用equals() 方法会返回true。

总结:

  • equals() 方法用于比较两个对象的内容是否相等。
  • 默认情况下,equals() 方法与== 运算符的行为相同,比较的是两个对象的引用地址。
  • 通常需要重写equals() 方法来实现自定义的相等比较逻辑。
  • 在重写equals() 方法时,需要满足自反性、对称性、传递性、一致性和非空性等原则。

equalsIgnoreCase() 方法

equalsIgnoreCase() 方法是Java中用于比较两个字符串内容是否相等(忽略大小写)的方法。它是String类中定义的方法,用于在不考虑大小写的情况下比较字符串。

equalsIgnoreCase() 方法的通用语法如下:

public boolean equalsIgnoreCase(String anotherString) {
    // 忽略大小写的相等比较逻辑的实现
}

使用equalsIgnoreCase() 方法进行字符串比较时,它会先将两个字符串都转换为小写(或大写),然后比较转换后的字符串是否相等,忽略大小写差异。

以下是一个示例,展示了如何使用equalsIgnoreCase() 方法进行字符串比较:

public class main {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "hello";
        String str3 = "WORLD";

        System.out.println(str1.equalsIgnoreCase(str2)); // true
        System.out.println(str1.equalsIgnoreCase(str3)); // false
    }
}

在上述示例中,我们使用equalsIgnoreCase() 方法比较了三个字符串的内容。尽管str1 和 str2 的大小写不同,但由于忽略了大小写差异,因此调用equalsIgnoreCase() 方法会返回true。而str1 和 str3 的大小写不同,并且大小写敏感,所以调用equalsIgnoreCase() 方法会返回false。

总结:

  • equalsIgnoreCase() 方法用于比较两个字符串内容是否相等,忽略大小写差异。
  • 它会将两个字符串都转换为小写(或大写),然后比较转换后的字符串是否相等。
  • equalsIgnoreCase() 方法是String类中定义的方法,可以直接使用。
  • 通过equalsIgnoreCase() 方法进行字符串比较时,可以忽略大小写的差异,使得比较更加灵活。

compareTo() 方法

compareTo() 方法是Java中用于比较两个字符串的大小关系的方法。它是Comparable接口中定义的方法,String类实现了Comparable接口,因此可以直接使用compareTo() 方法来比较字符串的大小关系。

compareTo() 方法的通用语法如下:

public int compareTo(String anotherString) {
    // 字符串大小关系比较逻辑的实现
}

compareTo() 方法比较的规则是基于字典顺序进行的,它会逐个比较两个字符串对应位置上的字符的Unicode值。具体规则如下:

  • 如果两个字符串在所有位置上的对应字符的Unicode值相等,则返回0。
  • 如果在某个位置上,调用compareTo() 方法的字符串的字符的Unicode值大于参数字符串的字符的Unicode值,则返回一个正数。
  • 如果在某个位置上,调用compareTo() 方法的字符串的字符的Unicode值小于参数字符串的字符的Unicode值,则返回一个负数。

具体可查看此表,

以下是一个示例,展示了如何使用compareTo() 方法进行字符串大小关系的比较:

public class main {
    public static void main(String[] args) {
        String str1 = "apple";
        String str2 = "banana";
        String str3 = "apple";

        System.out.println(str1.compareTo(str2)); // 返回一个负数 -1
        System.out.println(str2.compareTo(str1)); // 返回一个正数 1
        System.out.println(str1.compareTo(str3)); // 返回0
    }
}

在上述示例中,我们使用compareTo() 方法比较了三对字符串的大小关系。根据字典顺序,"apple" 在 "banana" 之前,因此调用str1.compareTo(str2) 返回一个负数;而 "banana" 在 "apple" 之后,因此调用str2.compareTo(str1) 返回一个正数;而 "apple" 和 "apple" 相等,因此调用str1.compareTo(str3) 返回0。

总结:

  • compareTo() 方法用于比较两个字符串的大小关系。
  • 它基于字典顺序进行比较,逐个比较两个字符串对应位置上的字符的Unicode值。
  • compareTo() 方法是Comparable接口中定义的方法,String类实现了Comparable接口,因此可以直接使用。
  • 通过compareTo() 方法进行字符串比较时,可以获得字符串的大小关系,便于排序和查找操作。

对比总结

1、== 操作符:

  • 用于判断两个对象的引用是否相同,即判断两个对象是否指向内存中的同一块地址。
  • 在比较字符串时,== 操作符比较的是两个字符串对象的引用是否相同,而不是内容是否相等。

2、equals() 方法:

  • 用于比较两个对象的内容是否相等,对于字符串来说,比较的是字符串的字符序列是否相同。
  • 在 String 类中,equals() 方法被重写,用于比较字符串对象的内容是否相等。

3、equalsIgnoreCase() 方法:

  • 与 equals() 方法类似,用于比较两个字符串的内容是否相等,但会忽略大小写的差异。
  • 例如,"hello" 和 "Hello" 在使用 equalsIgnoreCase() 方法进行比较时会被视为相等。

4、compareTo() 方法:

  • 用于比较两个字符串的大小关系,返回一个整数值。
  • 如果两个字符串相等,返回 0;如果调用字符串按字典顺序排列在参数字符串之前,返回负数;如果调用字符串按字典顺序排列在参数字符串之后,返回正数。

总结:

  • == 用于比较引用是否相同。
  • equals() 用于比较内容是否相等。
  • equalsIgnoreCase() 也用于比较内容是否相等,但会忽略大小写差异。
  • compareTo() 用于比较大小关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212400.html

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

相关文章

Oracle(17)Managing Roles

目录 一、基础知识 1、基础介绍 2、Predefined Roles 预定义的角色 3、各种角色的介绍 二、基础操作 1、创建角色 2、修改用户默认role 3、回收role 4、删除role 5、为角色授权 6、授予角色给用户 7、查看用户包含的角色: 8、查看角色所包含的权限 9、…

教育数字化助力打造个性化语言学习环境

2023年,我国教育数字化呈现高速发展态势,网络教育用户规模、在线教育市场规模、数字内容市场规模再创历史新高,数字校园建设普及率、教师数字技术素养等均高于全球平均水平。 在数字技术支撑下,新的语言学习方式也在逐渐普及。 语言学家克拉申(Stephen Kr-ashen)提出的二语习得…

hidl hwbinder和binder混合使用相关的joinThreadPool问题解答

背景: 今天一个学员在群里有个提问如下图,怎么有两个joinThread,会执行么?joinThread不是死循环等待数据吗? /frameworks/av/media/mediaserver/main_mediaserver.cpp 当开始看到这个时候确实也觉得最后的hw的join根本…

今年跳槽成功测试工程师原来是掌握了这3个“潜规则”

随着金九银十逐渐进入尾声,还在观望机会的朋友们已经开始焦躁:“为什么我投的简历还没有回音?要不要趁现在裸辞好好找工作?” “金九银十”作为人们常说的传统“升职加薪”的黄金季节,也是许多人跳槽的理想时机。然而…

Windows本地配置带GPU的Pytorch环境

首先需要安装并配置好Anaconda环境,安装教程教程随便找一个就好。 第一步:安装好之后创建conda虚拟环境: conda create -n your_env_name pythonx.x 第二步:安装需要版本的pytorch:pytorch下载链接 cu100/torch-1.2…

用嘉立创查找元件的原理图

目录 1.打开立创商城 2.搜索元件 ​编辑 3.复制编号 ​编辑 4.打开元件库 5.将复制好的编号进行搜索 1.打开立创商城 2.搜索元件 3.复制编号 4.打开元件库 5.将复制好的编号进行搜索

虚拟机第一次如何打开

1、将别人的虚拟机拷贝到自己的电脑盘里; 2、打开VMware,选择“打开虚拟机”; 3、选择拷贝的虚拟机里的.vmx文件; 4、选择“播放虚拟机”; 5、如果出现一个选择框,选“我已复制改虚拟机”即可。

PC端微信@所有人逻辑漏洞

(一)过程 这个漏洞是PC端微信,可以越权让非管理员艾特所有人,具体步骤如下 第一步:找一个自己的群(要有艾特所有人的权限)“123”是我随便输入的内容,可以更改,然后按c…

第二篇 《随机点名答题系统》——题库管理详解(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)

目录 1.功能需求 2.数据库设计 3.流程设计 4.关键代码 4.1.题库维护 4.1.1数据请求示意图 4.1.2添加题库(login.php)数据请求代码 4.1.3删除题库(login.php)数据请求代码 4.1.4 业务处理Service(tiKuService…

Python数据容器(字典)

字典 1.字典的定义2.字典数据的获取3.字典的嵌套4.嵌套字典的内容获取5.字典的常用操作6.常用操作总结7.遍历字典8.练习 1.字典的定义 同样使用{},不过存储的元素是一个一个的:键值对,语法如下 # 定义字典字面量 {key:value,key:value,...,…

小学生加减乘除闯关运算练习流量主微信小程序开发

小学生加减乘除闯关运算练习流量主微信小程序开发 经过本次更新,我们增加了新的功能和特性,以提升用户体验和运算练习的趣味性: 能量石与激励视频:用户可以通过观看激励视频来获取能量石,这些能量石可以用于解锁收费…

去掉 webstorm 白线

webstorm 编辑界面出现一条白线 ctrlshifta 打开设置窗口, 输入 “显示右边距” 英文版输入 “show right margin” 点击关闭即可

网络超时检测-11.9

应用场景 在网络通信中,很多操作会使得进程阻塞: TCP套接字中的recv/acceptUDP套接字中的recvfrom超时检测的必要性 避免进程在没有数据时无限制地阻塞实现某些特定协议要求,比如某些设备规定,发送请求数据后,如果多长…

nginx启动命令

普通启动 切换到nginx安装目录的sbin目录下,执行:./nginx 通过配置文件启动 ./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c是指定配置文件,而且配置文件路径必须指定绝对路…

yolo如何画框、如何变换目标检测框的颜色和粗细、如何运行detect脚本

这段代码是一个使用YOLO模型进行目标检测的Python脚本。下面我将逐步解释脚本的主要部分,并提供一些关于超参数的使用方法。 1. 脚本结构 导入相关库设置配置参数加载YOLO模型运行目标检测处理检测结果显示或保存结果 2. 超参数说明 --weights: 指定YOLO模型的…

屏蔽机房与普通机房有什么不同?

屏蔽机房与普通机房在设计和功能上存在一些明显的区别。下面是一些区别的主要方面: 电磁屏蔽:屏蔽机房采用了电磁屏蔽材料来减少电磁波的干扰。屏蔽机房能够有效地将外部的电磁干扰隔离开来,确保机房内设备的安全运行。 物理安全:…

halcon里面显示红色三角或者黄色三角+感叹号的算子代表什么含义

有时候,在Halcon里面使用某些算子的时候,左侧有红色或者黄色三角感叹号的提示。 如下图: 可以把鼠标放到红色感叹号上面,发现提示: 有这些标志的算子代表是Halcon中不推荐使用,可以淘汰的算子,…

Bobo Python 学习笔记

安装 Bobo 可以通过通常的方式安装,包括使用setup.py install 命令。当然,您可以使用Easy Install、Buildout或pip。 安装bobo Collecting boboDownloading bobo-2.4.0.tar.gz (17 kB) Collecting WebObDownloading WebOb-1.8.7-py2.py3-none-any.whl…

Stable Diffusion (version x.x) 文生图模型实践指南

前言:本篇博客记录使用Stable Diffusion模型进行推断时借鉴的相关资料和操作流程。 相关博客: 超详细!DALL E 文生图模型实践指南 DALLE 2 文生图模型实践指南 目录 1. 环境搭建和预训练模型准备环境搭建预训练模型下载 2. 代码 1. 环境搭建…

python基础练习题库实验八

文章目录 前言题目1代码 题目2代码 题目3代码 总结 前言 🎈关于python小题库的这模块我已经两年半左右没有更新了,主要是在实习跟考研,目前已经上岸武汉某211计算机,目前重新学习这门课程,也做了一些新的题目 &#x…