判断两个数或者两个对象是否相等,我们一般使用equals或者==比较,但是为什么String字符串的比较一般使用equals而基本数据类型的比较使用= =呢?

先说结论

 1 equals是方法,==是逻辑运算符2 基本数据类型没有equals方法,只能用==判断,比较的是两个数的值3 引用数据类型可以用equalse也可以用==判断,但是==判断效率更高,因为只是比较引用地址是否一致,equals方法如果不被重写的话相等于使用==判断,如果重写根据重写的逻辑判断。

我们尝试编写以下代码

  int a=10;a.equals()//报错,找不到此方法,基本数据类型没有equals方法

引用数据类型也就是我们经常说的对象类型,Object类是所有类的父类,在Object类中定义了equals方法

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

也就意味着如果子类没有重写equals方法的话,调用equals方法等于直接调用==判断,判断两个对象的引用地址是否一样,如果地址一样表明是同一个对象(就跟叫你大名和小名都是你本人一样,指向的都是你本人)

可是如果子类都不重写的话就会带来一个问题

"abc"和"abc"这两个常量如果放在不同的地址,两个常量居然会不相等!我们想要的只是比较下这两个字符串是不是一样而不关心他们俩存放在哪里

于是,这个时候就得重写equals方法:

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = length();if (n == anotherString.length()) {int i = 0;while (n-- != 0) {if (charAt(i) != anotherString.charAt(i))return false;i++;}return true;}}return false;}

下面做个题目:

        String a=new String("a");String a1=new String("a");String a2="a";S.show(a==a1);S.show(a==a2);S.show(a.equals(a1));

a和a1都是通过new创建的对象,内存地址不同,所以a==a1返回false,a2是在常量池中创建的对象,而a和a1都是在堆内存中创建的的对象,内存地址不同所以a= =a2返回false,因为重写了equals的String不光会对地址进行判断还会检查字符,所以a.equals(a1)返回的就是true

Java基础361问第5问——equals和==的区别相关推荐

  1. Java基础之String,StringBuilder,StringBuffer三者的区别

    Java基础之String,StringBuilder,StringBuffer三者的区别 目录 运行速度方面 线程安全方面 小结 1. 运行速度方面 运行速度,在这方面运行速度快慢为:StringB ...

  2. Java基础(以及面试常问问题)

    1.Vector,ArrayList, LinkedList的区别(面试常问到的) 三者都是实现集合框架中的List,也就是所谓有序集合,因此具体功能比较近似,比如都提供按照位置进行定位.添加或删除的 ...

  3. Java基础篇面试题49问与答 (2021最新版)

    本文包含了String.包装类型.反射.泛型.序列化.异常和IO的常见面试题. 本文收录于<面试小抄>系列,Github地址:https://github.com/cosen1024/Ja ...

  4. 面试题|Java基础面试题连环55问(2022版)

    1. Java语言有哪些特点? 2. Java和C++有什么关系,它们有什么区别? 3. JVM.JRE和JDK的关系是什么? 4. 什么是字节码?采用字节码的好处是什么? 5. Oracle JDK ...

  5. Java基础361问第4问——List如何遍历删除指定元素

    这道题是面百度时的一个问题,也是一道很经典的题目 给定一个整数集合{1,2,2,3,4},删除其中能够被2整除的元素(即最后集合变为{1,3}) 看到这个问题,我开始觉得很简单 for (int i ...

  6. Java基础之深入认识hashCode和equals

    Java是很多开发者都曾经接触过的一门开发语言,它之所以流行,那是因为他有很多的设计思想解决了很多现实中的问题,其中对象的equals方法,hashCode方法的设计思想值得我们学习,所以我们有必要去 ...

  7. Java基础系列:重写hashCode和equals

    1 场景 Map的key设置为对象时,必须重写对象的hashCode和equals方法. 原因 通过对象取值时,及时相同的对象(初始化值相同),get时,会出现null值. 方案 重写对象的hashC ...

  8. Java基础学习总结(1)——equals方法

    2019独角兽企业重金招聘Python工程师标准>>> 一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 ...

  9. Java基础知识学习巩固2--int和Integer有什么区别及扩展

    这个问题之前首先要介绍下Java数据类型, 一.Java基本类型,主要有8种,分别是: 1.boolean(布尔型即只有true和false), 2.char(字节型16 位 Unicode 字符), ...

最新文章

  1. 2021-2027年中国托育服务行业市场研究及前瞻分析报告
  2. android 取消和svn关联_Android Studio如何取消与SVN的关联
  3. 四、编译安装php-5.5.34
  4. 《Python Cookbook 3rd》笔记(3.11):随机选择
  5. bootstrap 输入错误提示_win7系统提示explorer.exe应用程序错误怎么办
  6. Nodejs是什么?
  7. flinksql on zeppelin安装及使用
  8. 前端学习笔记:Bootstrap框架入门
  9. 小米8青春版超级夜景安排上了 这个样张我是服气的!
  10. MySQL集群架构-DRBD+headbeat +lvs+keepalived
  11. Sql语句常用关键字
  12. MVC下c#对接微信公众平台开发者模式
  13. 年薪 40w 的应届生
  14. 搭建ftp服务器的超详细步骤。
  15. 知乎被爆裁员20%锤子60%,BAT裁员缩招为啥急于否认?
  16. eMMC mmcblk0boot0
  17. android取消输入法联想,输入法联想功能,怎么清除输入法联想
  18. 服务启动类型:自动、自动(延时启动)、手动、禁用
  19. 新冠病毒研究进展:维生素D或许能挽救新冠患者
  20. 计算机地址怎么填写,电脑服务器名称或地址怎么填

热门文章

  1. Kubernetes访问报错: No route to host
  2. 快手裁员30%,大部分年薪超100万!揭露职场真相:思考的深度,决定职场的高度...
  3. 股市里赚钱最快的是什么股?有些股票的机会来了!
  4. win10笔记本:掉帧卡顿、开机后卡顿、玩游戏帧数低、GPU占用率上不去,解决办法
  5. PotPlayer播放DST音频的mkv电影解码错误
  6. python版FlappyBird代码解析
  7. 别人学到失眠,而你看书就犯困?这样提神让你赶走疲惫!
  8. 一个屌丝程序猿的人生(八)
  9. 弗洛伊德(Floyd)算法之两点之间的最短距离问题
  10. 论文阅读 - On the efficacy of old features for the detection of new bots - CCF B