java equals和==的区别

目录

  • 一、equals
    • 1.前言
    • 2.重写equals方法
  • 二、==
  • 三、equals和==的区别

一、equals

1.前言

**当用equals来比较两个引用数据类型时默认比较的是它们的地址值,比如创建两个成员变量完全相同对象A和对象B两个进行比较,比较的是两个对象的地址值是否相等,而不是比较对象的成员变量,那么如果我想比较两个对象的name属性是否相等该如何去比较呢?答案就是重写对象的equals方法。
**

2.重写equals方法

首先编写一个类:

class testA{
    String name;
    public testA(){

    };
    public testA(String name){
        this.name = name;
    }
    public void print(){
        System.out.println("testA");
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "testA [name="+name+"]";
    }
}

我们先看看不重写equals方法的效果

在主方法中创建两个对象给name属性赋值,比较它们的name是否相等:

public class Demo14_equals {
    public static void main(String[] args){
        testA t1 = new testA("lisi");
        testA t2 = new testA("lisi");
        System.out.println(t1.equals(t2));
    }
}

效果:
在这里插入图片描述
明明两个对象的name都是lisi,为什么比较的时候却输出false勒?因为比较的是两个对象的地址值,而不是name值。


重写equals方法:

class testA{
    String name;
    public testA(){

    };
    public testA(String name){
        this.name = name;
    }
    public void print(){
        System.out.println("testA");
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "testA [name="+name+"]";
    }
    public boolean equals(Object o) {
        testA t3 = (testA)o;//将传入的o对象强转成testA对象
        return this.name.equals(t3.name);//自定义比较它们的name属性,放回结果
    }
}

效果:
在这里插入图片描述
可以看到比较成功了。

二、==

==的比较规则就是基本数据类型比较值,引用数据类型比较地址

让我们看个示例就明白了:

public class Demo14_equals {
    public static void main(String[] args){
        testA t1 = new testA("lisi");
        testA t2 = new testA("lisi");
        System.out.println(t1 == t2);
        System.out.println("lisi"=="lisi");
    }
}

输出:
在这里插入图片描述
很明显可以看到对象比较的是地址,基本数据比较的是值。

比较字符串也可以用下面这个方法:

public class Demo14_equals {
    public static void main(String[] args){
        System.out.println("lisi".equals("lisi"));
    }
}

效果:
在这里插入图片描述

三、equals和==的区别

equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。

== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。

String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。

希望对各位小伙伴有帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

〖Python网络爬虫实战⑫〗- XPATH语法介绍

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费…

【三十天精通Vue 3】第二天 Vue 3带来的新特性

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录引言一、 Vue 3 组件化架构1.1 Composition API1.2 Vuex 3 更新1.3…

OpenGL编程指南-freeglut安装(Windows平台)

OpenGL编程指南-freeglut安装(Windows平台) 1、前言 学习OpenGL编程首先需要可以跟着书中的示例代码进行学习。书中使用GLUT作为示例代码的演示,GLUT于1998年作者不在维护并不开源,freeglut是一个完美的代替方案。以后我们将会通…

23年5月高项学习笔记12 —— 干系人管理

过程: 1. 识别干系人:定期识别干系人,分析和记录他们的利益,参与度、相互依赖性、影响力和对项目的潜在的影响 输入:立项管理文件、沟通管理计划、干系人参与计划、需求文件、变更日志、问题日志、协议(协…

MySQL事物(基础篇)

MySQL事务事物的基本概念事物的ACID属性事务的使用事务隔离级别MVCC&ReadViewMySQL是否还存在幻读事物的基本概念 Transaction作为关系型数据库的核心组成,在数据安全方面有着非常重要的作用,本文会一步步解析事务的核心特性,以获得对事…

STM32CubeMx+HAL库实现USB CDC+MSC复合设备

之前的文章中介绍过STM32的USB应用,包括虚拟串口(CDC)和大容量存储设备(MSC)。今天来介绍USB实现CDC和MSC复合设备的方法。 硬件:STM32F407VET6 软件:STM32CubeMx v6.5F4库v1.27.1 编译环境&a…

自动驾驶概述

自动驾驶是指利用计算机视觉、机器学习、传感器等技术,使汽车或其他交通工具能够在没有人类干预的情况下,完成自主导航和行驶任务。自动驾驶技术可以提高交通安全、减少交通拥堵、提高车辆利用率等,并对未来的城市交通和交通工具设计产生深远…

采购招投标系统-高效管控招采流程-降低采购成本

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

【SpringBoot技术专题】「实战指南」从实战开发角度去分析操作RestTemplate的应用及使用技巧

前提介绍 当你的应用程序需要访问远程接口时,很容易被不同的浏览器和API调用协议弄晕。幸运的是,Spring框架已为我们提供了一个简单而功能强大的RestTemplate工具,它可以轻松地处理这些基础任务并提供一个简单的方式来访问各种API。 RestTe…

零售数据分析之操作篇12:子查询的应用

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 上期内容与作业 上一讲讲了占比相关内存计算的应用场景,包括占比、TOP占比、累计占比等,不同的占比&am…

Explain分析示例

Explain分析示例示例表explain 两个变种explain中的列1. id列2. select_type列3. table列4. type列NULL:const, system:eq_ref:ref:range:index:ALL:5.possible_keys列6. key列7. key_len列8. r…

Matlab simulink上手控制仿真学习笔记3-常用模块S Function及使用案例

讲得真的十分细致!个人感觉看完前4节就差不多了。 今天记录的是S Function。 内容比较多,加个目录: S Function前置工作1.1 parameter.m1.2 plant.mfunction [sys,x0,str,ts,simStateCompliance] plant(t,x,u,flag,pa)function [sys,x0,str…

《Kubernetes部署篇:Ubuntu20.04基于containerd二进制部署K8S 1.24.12集群(一主多从)》

一、架构图 如下图所示: 如下图所示: 二、环境信息 1、部署规划 主机名IP地址操作系统内核版本软件说明etcd01192.168.1.62Ubuntu 20.04.5 LTS5.15.0-69-genericetcd02192.168.1.63Ubuntu 20.04.5 LTS5.15.0-69-genericetcd03192.168.1.64Ubuntu 20.04.…

第三章 运算符

文章目录1. 什么是运算符2 算术运算符2.1 基本四则运算符 、-、*、/、%2.2 增量赋值运算符 、- 、* 、/ 、%2.3 自增/自减运算符 、--3. 关系运算符4. 逻辑运算符5. 位运算符6. 移位运算7. 条件运算符8. 运算符的优先级1. 什么是运算符 计算机的最基本的用途之一就是执行数学运…

Web Components 技术分析

简括: Web Components 基于四个主要的规范: Custom Elements,Shadow DOM,HTML Templates 和 HTML Imports。 Custom Elements 可以让开发人员创建自定义的 HTML 标签。 Shadow DOM 可以让开发人员将样式和行为封装到自定义元素内…

C/C++|物联网开发入门+项目实战|C语言基础|玩转c代码---从输入输出开始-学习笔记(6)

文章目录玩转c代码---从输入输出开始参考教程:C语言编程:一本全面的C语言入门教程(第3版)第16章需要掌握的内容需要了解的内容常见的人机交互接口串口的输入输出PC常用的几个输入输出函数示例代码3 printf函数使用难点分析A.格式控制字符串的基本形式:示…

今天给大家介绍一篇基于springboot的医院管理系统的设计与实现

临近学期结束,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基…

APK一键注入网络验证后台PHP源码ThinkPHP开发版

APK一键注入网络验证后台PHP源码ThinkPHP开发版 APK一键注入网络验证后台PHP源码ThinkPHP开发版 源码: https://url11.ctfile.com/d/25976711-55383299-827d49?p6724 (访问密码:6724) 修复 已去除登录提示到期问题。 功能简介 - 无注…

软考-套接字(scoket)

💤SocketSocket套接字:是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。将OSI模型中从传输层到物理层封装起来的抽象层,把网络协议隐藏在Socket抽象层中,只对使用者暴露API接口&#xff0c…

Redis实现分布式锁原理和Redisson框架实现分布式锁,全网最详细讲解

声明:我的大部分篇幅都讲的分布式锁的原理和实现,如果想直接用Redisson框架实现分布式锁,可以直接翻至最后面 关于分布式锁,适用于并发量特别大的微服务集群,能做到同步的实现资源的获取 我其实没有经过真实项目的分布…