Java中的经典面试题之==运算符与equals方法

news/2024/11/17 6:21:35/

1.==运算符

  1. 当比较类型是基本数据类型时,比较的是值是否相等,如:
int n1 = 1;
double n2 = 1.0;
System.out.println(n1 == n2);//true

     2.当比较类型是引用数据类型时,比较两个对象的内存地址是否相等,也就是判断它们是否是同一个对象。特殊情况:在Java中,String类型是引用数据类型,但是有一个特殊的性质,即字符串常量池。当我们使用双引号创建一个字符串时,Java会先检查字符串常量池中是否存在相同内容的字符串,如果存在,则直接返回该字符串的引用,如果不存在,则在常量池中创建一个新的字符串,并返回其引用。如:

String n3 = "hello";
String n4 = "hello";
System.out.println(n3 == n4);//true

在上述例子中,n3和n4都是使用双引号创建的字符串"hello",因此它们实际上引用的是同一个字符串对象,即它们的地址是相同的。所以,n3 == n4的比较结果是true。

如果使用new关键字创建字符串对象,比如: String n3 = new String("hello"); String n4 = new String("hello"); 那么n3和n4将引用不同的字符串对象,它们的地址是不同的,n3 == n4的比较结果将是false。

2.equals()方法

equals方法是Object类中的一个方法,用于比较两个对象的内容是否相等。默认情况下,equals方法也是比较两个对象的内存地址是否相等。但是,我们可以在自定义类中重写equals方法,从而实现自己的比较逻辑。

例如,我们可以在自定义类中重写equals方法,比较类中的某些属性是否相等,来判断两个对象是否相等。这样我们就可以用equals方法来判断两个对象是否相等,而不仅仅是比较它们的内存地址。

public class Person {String name;int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic 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 && Objects.equals(name, person.name);}
}public class Main {public static void main(String[] args) {Person person1 = new Person("Tom", 20);Person person2 = new Person("Tom", 20);// 使用"=="运算符比较两个对象if (person1 == person2) {System.out.println("person1 == person2");} else {System.out.println("person1 != person2");}// 使用equals方法比较两个对象if (person1.equals(person2)) {System.out.println("person1 equals person2");} else {System.out.println("person1 not equals person2");}}
}

 这里我们定义了一个Person类,重写了equals方法,比较了其name和age属性是否相等。在main方法中,我们创建了两个相同内容的Person对象,并使用"=="运算符和equals方法分别比较它们是否相等。

最终输出的结果为:

person1 != person2
person1 equals person2

 


http://www.ppmy.cn/news/1050017.html

相关文章

正则表达式在网页处理中的应用四则

正则表达式在网页处理中的应用四则 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的方法。几乎所有高级语言都提供了对正则表达式的支持,或者提供了现成的代码库供调用。本文以ASP环境中常见的处理任务为例,介绍正则表达式的应用技巧。 一、检验密…

Reids之Set类型解读

目录 基本介绍 命令概述 SADD key member1 [member2] SCARD key SINTER key1 [key2] SMEMBERS key SPOP key SUNION key1 [key2] 基本介绍 新的存储需求:存储大量的数据 在查询方面提供更高的效率需要的存储结构:能够保存大量的数据&#x…

外贸网站怎么做推广优化

外贸网站的推广和优化是关键,因为它可以帮助您扩展国际市场并吸引更多的客户。以下是e6zz seo多年经验总结出一些有效的方法,可以帮助您推广和优化外贸网站: 优化网站内容: 确保您的网站内容对国际客户有吸引力,包括产…

Qt使用qml(QtLocation)显示地图

一、qt版本和QtLocation模块版本确认 如果qt版本过低的话是没有QtLocation模块的,我的版本如下 构建工具版本如下 二、qml代码编写 1、工程中添加模块 首先在工程中添加模块quickwidgets positioning location 2、添加资源文件 3、在资源文件中添加qml文件 …

【QT】重写QAbstractLIstModel,使用ListView来显示多列数据

qt提供了几个视图来进行信息的列表显示,QListView可以用来显示继承QStractListModel的字符串列表中的字符串,默认的模型里面只包含一列的内容: 这里以qml为例子,先新建一个qml的项目,示例代码如下: 先创建一…

MySQL——基础——自连接

一、自连接 自连接查询语法: SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...; 自连接查询,可以是内连接查询,也可以是外连接查询 二、自连接演示 1.查询员工 及其 所属领导的名字(将一张表看作是两张同样的表,一张是员工信息表,另一张是老板信息表。员…

[管理与领导-38]:IT基层管理者 - 人的管理 - 左膀右臂下属要离职,怎么办?是放手还是留?

目录 一、考虑因素 二、放手的原因 1.1 胸襟 1.2 与团队不匹配 三、如何避免核心员工离职造成对团队的重大影响 四、如何降低成员离职的影响 五、如何团队过渡依赖个人 六、能力强的员工会离职,为什么还要培养员工 一、考虑因素 当左膀右臂下属要离职时&am…

python中(限小白,大佬勿入)python开发中的trick:常量

开场白 我是小白,今天被前端骂了一顿:我们交接不是说好了就给你四个变量:A,B。C。D。你这命名的这么具体,我这边给你传值不是很方便啊(因为不同模块有复用的图片路径),我说“那我改&…