Java面向对象之==运算符与 equals()方法

news/2024/10/22 13:34:00/

==运算符与 equals()方法

==运算符

  • 基本类型比较值:只要两个变量的值相等,即为true。
  • 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true。
  • 用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错。

equals()方法

  • equals():所有类都继承了Object,也就获得了equals()方法。还可以重写。
  • 只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象。
  • 格式:obj1.equals(obj2)
  • 特例:当用equals()方法进行比较时,对类File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;原因:在这些类中重写了Object类的equals()方法。
  • 当自定义使用equals()时,可以重写。用于比较两个对象的“内容”是否都相等。

重写equals()方法的原则

  • 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
  • 自反性:x.equals(x)必须返回是“true”。
  • 传递性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
  • 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管重复x.equals(y)多少次,返回都是“true”。
  • 任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
/** 	面试题: == 和 equals() 区别* *	 一、回顾 == 的使用:* == :运算符* 1. 可以使用在基本数据类型变量和引用数据类型变量中。* 2. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)*    	如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体* 	补充: == 符号使用时,必须保证符号左右两边的变量类型一致。* * 	二、equals()方法的使用:* 1. 是一个方法,而非运算符* 2. 只能适用于引用数据类型* 3. Object类中equals()的定义:*    public boolean equals(Object obj) {return (this == obj);}*    	说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体* * 4. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是*    	两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。*    * 5. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们*    	就需要对Object类中的equals()进行重写。*    	重写的原则:比较两个对象的实体内容是否相同。*/
public class EqualsTest {public static void main(String[] args) {// 基本数据类型int i = 10;int j = 10;double d = 10.0;System.out.println(i == j);// trueSystem.out.println(i == d);// trueboolean b = true;
//		System.out.println(i == b);char c = 10;System.out.println(i == c);// truechar c1 = 'A';char c2 = 65;System.out.println(c1 == c2);// true// 引用类型:Customer cust1 = new Customer("Tom", 21);Customer cust2 = new Customer("Tom", 21);System.out.println(cust1 == cust2);// falseString str1 = new String("atguigu");String str2 = new String("atguigu");System.out.println(str1 == str2);// falseSystem.out.println("------------");System.out.println(cust1.equals(cust2));// false--->trueSystem.out.println(str1.equals(str2));// trueDate date1 = new Date(32432525324L);Date date2 = new Date(32432525324L);System.out.println(date1.equals(date2));// true}
}

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

相关文章

抄写Linux源码(Day3:启动南大OS)

我们可以尝试启动南大OS,接着阅读南大OS源码,看看 JYY/YZH 构建主引导扇区的手段 (注意:我使用的是南大2023年的 OS 实验代码) https://jyywiki.cn/OS/2023/labs/Labs 首先,根据 JYY 的文档,…

Linux搭建pikachu靶场(以centos为例)

Linux搭建pikachu靶场 Pikachu是一个使用PHP语言编写的Web漏洞测试靶场。下面是在CentOS 7上安装Pikachu靶场的步骤: 安装LAMP (Linux, Apache, MySQL, PHP) 堆栈: 首先,需要在CentOS 7服务器上安装LAMP堆栈。 安装Apache: yum i…

【MyBatis】MyBatis把空字符串转换成0的问题处理方案(96)

先看问题: Postman入参: MyBatis采用map循环插入: // Mapper接口层void addPar(Param(value "question") Map<String, Object> paramMap);<!-- 新增&#xff1a;参数 --><insert id"addPar" parameterType"map">INSERT IGNO…

外键字段的增删改查、多表查询(子查询和连表查询、正反向、聚合查询、 分组查询、 F与Q查询)、django中如何开启事务

一、 外键字段的增删改查 1.多对多的外键增删改查图书和作者是多对多&#xff0c;借助于第三张表实现的&#xff0c;如果想绑定图书和作者的关系&#xff0c;本质上就是在操作第三方表2.如何操作第三张表问题&#xff1a;让你给图书添加一个作者&#xff0c;他俩的关系可是多对…

Java和Python一些处理sql方式总结

将查询结果导入csv文件中 public static int executeUpdate(String sql, Object[] param) {//创建一个PreparedStatement对象用来操作数据库PreparedStatement pstmt null;//getConnection()方法为我自己定义的获取数据库连接的方法pstmt getConnection().prepareStatement(s…

《面试1v1》ElasticSearch 和 Lucene

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…

【Spring】学习Spring需要掌握的核心设计思想

目录 一、Spring是什么 二、什么是IoC容器 1、什么是容器 2、什么是IoC 3、Spring IoC 4、DI&#xff08;依赖注入&#xff09; 4.1、IoC和DI的区别 5、 DL&#xff08;依赖查找&#xff09; 一、Spring是什么 我们通常所说的Spring指的是Spring Framework&#xff08;…