广告
返回顶部
首页 > 资讯 > 精选 >javaSE中的==和equals的联系与区别是什么
  • 325
分享到

javaSE中的==和equals的联系与区别是什么

2023-06-16 10:06:12 325人浏览 安东尼
摘要

本篇内容主要讲解“javaSE中的==和equals的联系与区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javaSE中的==和equals的联系与区别是什么”吧!问题这里先抛出一些比

本篇内容主要讲解“javaSE中的==和equals的联系与区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javaSE中的==和equals的联系与区别是什么”吧!

问题

这里先抛出一些比较典型笔试问题:

int x = 10; int y = 10; String str1 = new String("abc"); String str2 = new String("abc"); String str3 = "abc"; String str4 = "abc"; System.out.println(x == y); // 输出? System.out.println(str1 == str2); // 输出? System.out.println(str1.equals(str2)); // 输出? System.out.println(str3 == str4); // 输出? System.out.println(str1 == str3); // 输出? System.out.println(str1.equals(str3)); // 输出?  Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println(f1 == f2);// 输出? System.out.println(f3 == f4);// 输出?

正文

 我们通常就是说"=="用来判断两个变量之间的的值是否相等。变量又分为基本数据类型变量和引用类型。如果是基本数据类型的变量直接比较值而引用类型要比较对应的引用的内存的首地址。而equals方法  通俗来说就是用来比较两个对象长得是否一样。判断两个对象的某些特征(内容)是否一样。实际上就是调用对象的equals方法进行比较。那么我们来看看equals方法吧!

 equals方法其实是属于Object类的方法。因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层实现其实就是是"=="号。

public boolean equals(Object obj) {     return (this == obj); }

那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用"=="号的效果一样,也是比较的对象地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,比如String类,Date类,基本数据类型的包装类等。可以看哈String类的源码:

public boolean equals(Object var1) {        if (this == var1) {            return true;        } else {            if (var1 instanceof String) {                String var2 = (String)var1;                int var3 = this.value.length;                if (var3 == var2.value.length) {                    char[] var4 = this.value;                    char[] var5 = var2.value;                    for(int var6 = 0; var3-- != 0; ++var6) {                        if (var4[var6] != var5[var6]) {                            return false;                        }                    }                    return true;                }            }            return false;        }    }

解决

看了上面的描述,相信你可以做对或者回答起大多数这类的问题。但是还需要注意以下两点:

String str3 = "abc"; String str4 = "abc"; System.out.println(str3 == str4); // 输出true

这里为什么会是true呢?按理说str3和str4是两个对象,"=="比较的是地址,应该会是false才对。如果你是这么想的,那你就不是很了解String类。String类,我们都知道它是不可变的字符序列,存储在常量池中,所以当你声明了一个str3="abc"时,就会在常量池中开辟一个内存空间来存放"abc",下次再声明时,就会在常量池中去找,有,就直接把当前地址赋给变量,没有,就再创建。因此,此处的str3和str4是指向的同一个内存地址。

Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println(f1 == f2);// 输出true System.out.println(f3 == f4);// 输出false

看到上面的答案是不是感到十分的诧异。其实这里隐藏着一个知识点。就是包装类的缓存问题。下面简单描述一下:整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理。当然其目的就是提高效率。缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。

此处以Integer类为例,源码参考:public  static Integer valueOf(int i) { if (i >= IntegerCache.low && i <=  IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return  new Integer(i); // 超过范围就是new的Integer对象 } 这段代码中我们需要解释下面几个问题:1.  IntegerCache类为Integer类的一个静态内部类,仅供Integer类使用,作用就是初始化数组cache的,这个过程会在类加载时完成。感兴趣可以去看哈源码,这里就不再粘贴了。  2. 一般情况下  IntegerCache.low为-128,IntegerCache.high为127,IntegerCache.cache为内部类的一个静态属性。

看到这,相信你对上面抛出的问题,已经可以迎刃而解。答案参考:

int x = 10;       int y = 10;       String str1 = new String("abc");       String str2 = new String("abc");       String str3 = "abc";       String str4 = "abc";       System.out.println(x == y); // 输出true       System.out.println(str1 == str2); // 输出false       System.out.println(str1.equals(str2)); // 输出true       System.out.println(str3 == str4); // 输出true       System.out.println(str1 == str3); // 输出false       System.out.println(str1.equals(str3)); // 输出true        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;       System.out.println(f1 == f2);// 输出true       System.out.println(f3 == f4);// 输出false

到此,相信大家对“javaSE中的==和equals的联系与区别是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: javaSE中的==和equals的联系与区别是什么

本文链接: https://www.lsjlt.com/news/283192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javaSE中的==和equals的联系与区别是什么
    本篇内容主要讲解“javaSE中的==和equals的联系与区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javaSE中的==和equals的联系与区别是什么”吧!问题这里先抛出一些比...
    99+
    2023-06-16
  • javaSE中的==和equals的联系与区别是怎样的
    这篇文章给大家介绍javaSE中的==和equals的联系与区别是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。写在前面:==和equals是我们面试中经常会碰到的问题。那么它们之间有什么联系和区别呢?今天我们就...
    99+
    2023-06-03
  • javase和javaee的区别是什么
    JavaSE(Java Standard Edition)是Java语言的标准版,提供了Java编程语言的核心功能和库,主要用于开发...
    99+
    2023-08-30
    java
  • Equals、==和RefrenceEquals的区别是什么
    本篇文章为大家展示了Equals、==和RefrenceEquals的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们这里将简单对比Equals、==和RefrenceEquals的区别...
    99+
    2023-06-17
  • equalsignorecase和equals的区别是什么
    equalsIgnoreCase是String类的方法,用于比较两个字符串是否相等,不区分大小写。即使两个字符串的字符顺序和大小写不...
    99+
    2023-08-25
    区别
  • Java中的(==)与equals有什么区别
    本篇内容主要讲解“Java中的(==)与equals有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的(==)与equals有什么区别”吧!j...
    99+
    2022-10-19
  • unix和linux的区别与联系是什么
    这篇文章主要介绍“unix和linux的区别与联系是什么”,在日常操作中,相信很多人在unix和linux的区别与联系是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”unix和linux的区别与联系是什么...
    99+
    2023-06-14
  • JSP和serverlet的区别与联系是什么
    JSP(JavaServer Pages)和Servlet(Java Servlet)是Java Web开发中常用的两种技术,有以下...
    99+
    2023-08-15
    JSP serverlet
  • Session和Cookie的区别与联系是什么
    Session和Cookie是两种不同的机制,用于在Web应用中保存用户状态信息。区别:1. 存储位置:Cookie存储在客户端(浏...
    99+
    2023-08-15
    Session Cookie
  • LR和SVM的联系与区别是什么
    这篇文章主要介绍“LR和SVM的联系与区别是什么”,在日常操作中,相信很多人在LR和SVM的联系与区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”LR和SVM的联系与区别是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-19
  • tomcat与apache的区别与联系是什么
    Tomcat和Apache是两个不同的软件,但也可以配合使用。1. Tomcat是一个独立的Web应用服务器,它专门用于运行Java...
    99+
    2023-09-21
    Tomcat apache
  • Java和JavaScript区别与联系是什么
    本篇内容主要讲解“Java和JavaScript区别与联系是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java和JavaScript区别与联系是什么”吧!Java和JavaScript区...
    99+
    2023-07-05
  • Java中使用==和equals的区别是什么
    这篇“Java中使用==和equals的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中使用==和equa...
    99+
    2023-06-29
  • Python中.iloc与.loc的区别、联系和用法是什么
    本文小编为大家详细介绍“Python中.iloc与.loc的区别、联系和用法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中.iloc与.loc的区别、联系和用法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-30
  • hive中order by与distribute by的区别和联系是什么
    本篇内容主要讲解“hive中order by与distribute by的区别和联系是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hive中order by与distribute by的区...
    99+
    2023-06-04
  • 云服务器和数据库的区别和联系与区别是什么
    云服务器和数据库都是常用的网络存储和数据备份解决方案,但它们在一些方面存在一些明显的区别。 云服务器是一种虚拟化服务器,用户只需访问服务器的一个或多个磁盘空间,而无需访问物理计算机或存储设备。它们通常用于数据备份,因为它们提供了一个更高效...
    99+
    2023-10-27
    区别 服务器 数据库
  • 云服务器与虚拟主机的区别和联系与区别是什么
    1. 云服务器和虚拟主机的定义 1.1 云服务器 云服务器是一种基于云计算技术的虚拟服务器,它可以在云平台上创建和管理。云服务器可以提供更高的可靠性、可扩展性和安全性,同时还可以根据需要进行弹性扩容和缩容。 1.2 虚拟主机 虚拟主机是一...
    99+
    2023-10-26
    区别 虚拟主机 服务器
  • 云服务器与云数据库的区别和联系与区别是什么
    云服务器(Cloud Storage,CDN)与云数据库(Cloud Database,CDB)是互联网云服务中的两种常见云服务形式。以下是云服务器与云数据库的主要区别和联系: 存储:云服务器存储的数据主要是以云主机的形式存储的,而云数...
    99+
    2023-10-27
    区别 服务器 数据库
  • 云服务器和虚拟主机的区别和联系与区别是什么
    云服务器(Cloud Hosting)是一种提供在线服务器托管和虚拟主机服务的服务。用户可以通过租用云服务器来构建自己的网站和应用程序,同时拥有更高的弹性和可靠性。 云服务器与虚拟主机的区别在于它们的架构和技术上的不同。云服务器使用虚拟化...
    99+
    2023-10-26
    区别 虚拟主机 服务器
  • sql与mysql有什么区别和联系
    下文主要给大家带来sql与mysql有什么区别和联系,希望这些内容能够带给大家实际用处,这也是我编辑sql与mysql有什么区别和联系这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。  &...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作