首页 > 其他分享 >==与 equals 的区别?

==与 equals 的区别?

时间:2023-07-10 23:11:22浏览次数:34  
标签:false 区别 对象 Object equals User true

一. 介绍:

   Java中的 "=="  是一个运算符,是用于比较两个对象地址值或基本数据类型之间的值是否相等。它的来源可以追溯到C语言,以及受C语言影响的许多其他编程语言。

   Java中的equals() 是一个方法,可重写该方法用于比较两个对象属性内容是否相等的方法。该方法继承自Object类,在Java的所有类中都可以使用。

 

二.  区别:

   1. 语法不同:

     == 是运算符 C语言编写的运算符;

     equals() 是Object类的方法;

 

   2. 作用不同:

    基本类型: == 是用来做值比较的,而equals()不能直接用于比较基本数据类型,需要转换为其对应的包装类型。

    引用类型: == 和 equals() 都可以比较栈内存中引用的地址值是否相等 。相等为 true 否则为 false,但是通常对某个类重写equals()方法,以自定义两个对象相等的条件(Object.equals() 是比较地址)。

 

三. 代码展示

public class User   {

    private String name;

// 略: 构造方法、getter、setter、toString()等
// 重写equals() 方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;  // 若地址值一致则直接返回 true
        if (o == null || getClass() != o.getClass()) return false;  // 若对象为null 或者 对象非同一个类,则直接返回false;
        User user = (User) o;  // 获取该对象,强转为user类
        return Objects.equals(name, user.name); // 使用equals 比较对象属性是否一致,返回结果true 或 false
    }
// 重写hashcode方法
    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

    public static void main(String[] args) {
        User u1 = new User("小米");
        User u2 = new User("小米");
        // 比较地址值
        System.out.println(u1 == u2);
        // 比较对象内容
        System.out.println(u1.equals(u2));
    }

输出结果:
    false
    true

    

  从代码上可以看出来在new 新对象后,地址值是发生改变的,通过 == 运算符 或者 原生Object.equals() 方法,是不能判断对象的属性的,所以需要在该类重写equals()方法,使自定义类比较其值是否相等。

 

 

  

  

标签:false,区别,对象,Object,equals,User,true
From: https://www.cnblogs.com/victor-sin/p/17542630.html

相关文章

  • strcpy、strncpy与memcpy的区别你了解吗?
    一、定义1.memcpy函数void*memcpy(void*destin,void*source,unsignedn);作用:函数memcpy从source指向的对象中复制n个字符到destin指向的对象中返回值:函数memcpy返回destin的指针。2.strcpy函数charstrcpy(chardest,constchar*src);作用:函数strcpy把src指向的......
  • 细节决定成败:探究Mybatis中javaType和ofType的区别
    一.背景描述今天给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一的查询。在练习的时候,小张同学突然举手求助,说在做预习作业使用一对多查询时,遇到了ReflectionException 异常 。二.情景再现1.实体类为了给大家讲清楚这个异常的产生原因,壹哥先列出今天案例中涉及到的两......
  • vite和webpack的区别
    Vite和Webpack都是现代前端开发中的常见打包工具,五个主要区别:1.开发模式不同Webpack在开发模式下依然会对所有模块进行打包操作,虽然提供了热更新,但大型项目中依然可能会出现启动和编译缓慢的问题;而Vite则采用了基于ESModule的开发服务器,只有在需要时才会编译对应的模块,大幅......
  • Oracle中varchar2(20)和varchar2(20 byte)区别 建议 使用统一的格式如:varchar2(20)
    Oracle中varchar2(20)和varchar2(20byte)区别建议使用统一的格式如:varchar2(20)原文链接:https://blog.csdn.net/u010033674/article/details/8736791   开发环境中:有的表中字段类型定义为varchar2(20)有的表中字段类型定义为varchar2(20byte)varchar2(20)和varchar2(......
  • 做项目与做产品的区别详解
    1.对质量要求做项目的第一要求是在要求的时间内开发出满足客户需求的软件,它的第一准则是客户永远是对的,开发者必须按客户要求的做,但是因为客户提出的要求往往是发散的、弱逻辑的、非系统的,所以开发出的软件需要很多硬编码,再加上时间紧迫,不能对已经开发出来的模块进行必要的重构,项......
  • vue--day13--watch与computed的区别
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>watch实现名字案例</title><scri......
  • django values 与values_list的区别
    values values()方法返回包含字典的QuerySet<QuerySet[{'comment_id':1},{'comment_id':2}]>values_listvalues_list()方法返回一个包含元组的QuerySet<QuerySet[(1,),(2,)]>如果您使用values_list()单个字段,则可以使用flat=True返回单个值的QuerySet而不是1个元......
  • C#中IsNullOrEmpty和IsNullOrWhiteSpace的使用方法有什么区别?
    前言今天我们将探讨C#中两个常用的字符串处理方法:IsNullOrEmpty和IsNullOrWhiteSpace。这两个方法在处理字符串时非常常见,但是它们之间存在一些细微的区别。在本文中,我们将详细解释这两个方法的功能和使用场景,并帮助您更好地理解它们之间的区别。IsNullOrEmpty作用该方法用于......
  • String、StringBuffer、StringBuilder 的区别?
    一.介绍String、StringBuffer、StringBuilder:  前言: String、StringBuffer、StringBuilder均在java.lang包下;String: 在Java中,String是一个特殊的引用类型,用于表示文本字符串。它提供了许多方法来操作和处理字符串,比如连接、截取、查找、替换等。String类......
  • FTP与SFTP的区别
    1、FTP是什么?FTP指的是文件传输协议(FileTransferProtocol),是用于在网络上进行文件传输的一套标准协议,它工作在OSI模型的第七层,TCP模型的第四层,即应用层,使用TCP传输,客户在和服务器建立连接前要经过一个“三次握手”的过程,保证客户与服务器之间的连接是可靠的,而且......