equals和==的区别

2023-05-16

equals和==经常用来去比较两个值或者两个对象。

==如果只是用来比较基本数据类型常量的话,那么比较的就是两个常量的值,如果用来去比较两个对象引用,那么比较的是两个对象的地址。equals在java中一般都是比较两个对象的值,前提是java提供的类中重写了equals这一方法(绝大多数equals方法在java类中均被重写)。

当str1和str2都是引用类型

public static void main(String[] args) {
        String str1 = new String("aaa");
        String str2 = new String("aaa");
        System.out.println(str1.equals(str2));
        System.out.println(str1 == str2);
    }

如上面代码,当new两个String类对象时,new String("aaa")分别在常量池创建了"aaa"对象,然后在堆内存new了对象str,对象成员变量赋予aaa的值。

因而new两次对象后,堆内存中的str1和str2分别是两个不同的对象,地址不相同,值相同,最后equals比较返回值相等为true。当用==去比较时,因为两个对象地址不同因而输出为false。

当str1和str2都是常量时的情况

public static void main(String[] args) {
        String str1 = "aaa";
        String str2 = "aaa";
        System.out.println(str1.equals(str2));
        System.out.println(str1 == str2);
    }

如果在自己写的类中equals方法没有被重写的话默认还是比较地址,相当于==。

class Animal{
    private String type;
    public Animal(String type) {
        this.type = type;
    }
}
public class test35 {
    public static void main(String[] args) {
        Animal animal1=new Animal("cat");
        Animal animal2=new Animal("dog");
        System.out.println(animal1.equals(animal2));
    }
}

如上面代码,自己构造的类中如果没有去重写equals方法则默认还是比较地址,因而返回false。

特殊情况

public static void main(String[] args) {
        int i=0;
        Integer j=new Integer(0);
        Integer k=new Integer(0);
        System.out.println(i==j);
        System.out.println(j.equals(i));
        System.out.println(j==k);
        System.out.println(j.equals(k));
    }

 当 i 是一个基本数据类型,j 作为一个包装引用类型时,i 和 j 使用 == 进行比较时,j会进行自动拆箱,变成一个基本类型:0,因而==比较返回结果为true。

j 和 k 都是包装引用类型时,没有拆箱操作,== 比较的仍然是j和k的地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

equals和==的区别 的相关文章

随机推荐

  • 竞赛练习题Ⅰ

    第一题 xff1a 回文数 取自CSDN竞赛第22期第四题 题干 xff1a 给定任意一个数字 m xff0c 然后给出数字 n xff0c 则需在 m 中去掉 n 位数 xff0c 保持各位顺序不变的情况下 xff0c 得到最大数 实例
  • HAL库--定时器--PWM呼吸灯实验和非PWM呼吸灯实验

    1 呼吸灯原理分析 xff1a 模拟人体呼吸 xff0c 吸气和呼气各占1 5S xff0c 人眼的图像滞留时间0 04s 1 24帧画面 xff0c 按最快0 04s算 xff0c 就是40ms 亮0 02S xff0c 灭0 02s x
  • 获取form表单的有name属性的value值

    span class token keyword var span model span class token operator 61 span span class token punctuation span span class t
  • Python+Webdriver实现淘宝、京东等抢单操作

    最近双十一已经到了 xff0c 笔者为了拓展技术水平研究了一下网络爬虫技术 xff0c 其中双十一给人印象最深刻地就是抢单了 xff0c 爬虫学的好 xff0c 监狱进得早 本着学术和技术研究的态度 xff0c 笔者仅使用了普通商品进行测试
  • 记录一下如何使用IDEA(2022.2.4版本)创建一个web项目

    1 xff0c 下载IDEA专业版 具体下载安装请自行搜索教程 在校学生有教育邮箱可以进行认证 xff0c 然后免费使用 xff08 具体做法可以自行搜索 xff09 xff08 好像IDEA社区版不行 xff0c 会在后面有些地方卡住 x
  • 计算机操作系统 | 必学生产者-消费者问题 | 参考自王道考研 | 无知的我学习日记(图文排版无水印)

    为了深入计算机底层 xff0c 我正在基于 王道考研 学习计算机操作系统 笔记特点是 我重新整理了涉及资料的一些语言描述 排版 xff0c 而使用了自己比较容易理解的描述 同样是回答了一些常见关键问题 如果有遇到有任何无法进展问题或者疑惑的
  • 对Ajax的一些理解

    什么是Ajax Ajax 61 Asynchronous JavaScript and XML 异步的 JavaScript 和XML Ajax 不是新的编程语言 xff0c 而是一种使用现有标准的新方法 Ajax是一种用于创建快速动态网页
  • 启动hdfs 三种方法

    启动hdfs 三种方法 star all sh 1 手动启动和停止hdfs节点 启动 在master上 xff1a hadoop daemon sh start namenode 在三台主机 xff1a hadoop daemon sh s
  • 基于Maven的Mybatis开发环境搭建

    1 首先我们需要创建一个基于Maven的java项目 2 在数据库中创建一张表及在idea中创建对应实体类 package com ffyc mybatisdemo model public class Admin private int
  • C++程序员这行能干一辈子吗?

    有人说 xff0c 程序员这一行就是吃青春饭 xff0c 不能干一辈子 xff0c 因为程序员面对的是一份高强度的工作 xff0c 同时面临着技术的快速迭代 xff0c 对于身体素质 学习能力等都有很高的要求 xff0c 所以很多人都面临入
  • 新装的centos7使用ip addr 命令不显示ens33的ip地址

    由于需要 xff0c 又重新装了几台虚拟机 xff0c 都是不同的ip xff0c 新装的虚拟机都不会显示ens33 下面的ip地址 就像这样 xff1a 输入 cd etc sysconfig network scripts 把对应的含有
  • GoLang之ACM控制台输入输出

    文章目录 GoLang之控制台输入输出1 源码1 1Scan1 2Scanf1 3Scanln 2 函数使用2 1scan输入单个参数时 xff0c 遇到回车会停止 多行 2 2scan输入单个参数时 xff0c 遇到空格会停止 多行 2
  • 基于SpringBoot+VUE的服装销售商城管理系统

    项目背景 随着科学技术的飞速发展 xff0c 社会的方方面面 各行各业都在努力与现代的先进技术接轨 xff0c 通过科技手段来提高自身的优势 xff0c 服装销售商城当然也不能排除在外 服装销售商城是以实际运用为开发背景 xff0c 运用软
  • 用Selenium定位充满div class页面元素的方法,id、xpath都没用的抓狂情况下

    以搜狐网首页为例 xff0c 我们要定位 搜狗邮箱 这个链接 xff08 如果是xpath等等各种selenium内置提供的定位方法都没用的情况下 xff09 第一步 xff0c 找到该元素 xff0c 此时显示 lt div class
  • SEC物权链奖金制度分析

    启程SEC物权链是什么 xff1f 靠谱吗 xff1f SEC公链是什么 xff1f 物权链怎么样 xff1f 分析于下 xff1a 一 定位 xff1a 依托原中小企业上市包装辅导策划以及不良资产运作等业务 xff0c 130家实体资产分
  • 基于SSM的个人健康信息管理

    项目背景 随着科学技术的飞速发展 xff0c 通过科技手段提高自身的优势 xff1b 对于个人健康信息管理当然也不能排除在外 xff0c 随着网络技术的不断成熟 xff0c 带动了个人健康信息管理 xff0c 它彻底改变了过去传统的管理方式
  • 基于spring boot的个人博客系统的设计与实现

    末尾获取源码 开发语言 xff1a Java Java开发工具 xff1a JDK1 8 后端框架 xff1a SpringBoot 前端 xff1a Vue 43 HTML 数据库 xff1a MySQL5 7和Navicat管理工具结合
  • day 3

    用栈来做是最简便的 栈 stack 是一种数据结构 xff0c 遵循先进后出的原则 最常用的方法为stack pop弹出最顶部的元素并删除 stack peek弹出最顶部的元素查看 xff0c 但不删除 stack push 添加一个元素
  • java方向笔试强训day6

    分别使用字符串和数组的方式 xff0c 数组更简便一些 import java util Scanner public class test26 将字符串转化为数字 public static int function26 String s
  • equals和==的区别

    equals和 61 61 经常用来去比较两个值或者两个对象 61 61 如果只是用来比较基本数据类型常量 的话 xff0c 那么比较的就是两个常量的值 xff0c 如果用来去比较两个对象引用 xff0c 那么比较的是两个对象的地址 equ