==和equals的区别(面试题)

==和equals有什么区别

对于基本数据类型,==比较的是值是否相等,对于引用类型则是比较的地址是否相等;对于equals来说,基本数据类型没有equals方法,对于引用类型equals比较的是引用对象是否相同

那针对以上结论,我们来看看以下代码:

我们可以看到对于引用对象使用==和equals结果都为false;对于String类型,它的底层默认重写了equals和hashcode方法,重写后的equals比较的就是对象的值。

那我们现在重写Userinfo的equals和hashcode方法,再来进行输出:

java 复制代码
 package com.yinan.entity;
 ​
 import lombok.*;
 ​
 import java.io.Serializable;
 import java.util.Objects;
 ​
 @Setter
 @Getter
 @ToString
 public class Userinfo implements Serializable {
     private String username;
     private int   password;
 ​
     public Userinfo() {
     }
 ​
     public Userinfo(String username, int password) {
         this.username = username;
         this.password = password;
     }
 ​
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
         Userinfo userinfo = (Userinfo) o;
         return password == userinfo.password && Objects.equals(username, userinfo.username);
     }
 ​
     @Override
     public int hashCode() {
         return Objects.hash(username, password);
     }
 }
java 复制代码
 @SpringBootTest
 public class JavaBaseTests {
 ​
 //    测试equals和hashcode的区别
     @Test
     void  testEqualsAndHashCode() {
 ​
         Userinfo user1=new Userinfo("yinan",123);
         Userinfo user2=new Userinfo("yinan",123);
         boolean res=user1==user2?true:false;
         System.out.println(res);
         boolean re=user1.equals(user2);
         System.out.println(re);
     }
 }

这个时候重写equals方法后就会发现结果变为了true。

总结==和equals的区别:

对于基础数据类型,==比较的是值是否相等,基础数据类型没有equals方法

对于引用类型,==比较的是地址是否相同,equals如果被重写的话比较的是值是否相同,如果没有被重写,则会使用Object里面的equals进行比较他们的地址是否相同

相关推荐
wr2005147 分钟前
第二次作业,渗透
java·后端·spring
机器视觉知识推荐、就业指导8 分钟前
Qt 和 C++,是不是应该叫 Q++ 了?
开发语言·c++·qt
m0_7482299925 分钟前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
liu****26 分钟前
三.Qt图形界面开发完全指南:从入门到掌握常用控件
开发语言·c++·qt
阿蒙Amon35 分钟前
C#每日面试题-Thread.Sleep和Task.Delay的区别
java·数据库·c#
Haooog36 分钟前
AI应用代码生成平台
java·学习·大模型·langchain4j
布茹 ei ai39 分钟前
Python屏幕监视器 - 自动检测屏幕变化并点击
开发语言·python
爬山算法1 小时前
Hibernate(67)如何在云环境中使用Hibernate?
java·后端·hibernate
小龙报1 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
黎雁·泠崖1 小时前
Java抽象类与接口:定义+区别+实战应用
java·开发语言