"=="的作用是比较两个变量是否相等。

  • 当变量是基本数据类型时,比较的是值是否相等的:相等返回true,不等返回false:
     double a = 100.0;int b = 100;System.out.println(a==b);//输出结果为:true
  • 当变量是引用类型时,比较的是地址:地址一样返回true,地址不同则返回false:
     String str1 = "apple";String str2 = "apple";System.out.println(str1==str2); //输出结果为:true
     String str3 = new String("lemo");String str4 = new String("lemo");System.out.println(str3==str4);//输出结果为:false

"equals()"既可以用于判断 Number 对象与方法的参数进是否相等,也可以用于字符串与指定的对象比较。

  • 当变量是Number时(且不为null)参数类型数值都相等时返回true,否则返回false(Double 和 Float 对象还有一些额外的条件):
     Integer x = 10;Integer y = 5;Integer z = 10;Short m =  10;System.out.println(x.equals(y));System.out.println(x.equals(z));System.out.println(x.equals(m));//输出结果为:falsetruefalse
  • 当变量为String类时:先比较地址,再比较每个字符,当地址相同时即刻返回true,不用再比较每个字符;当地址不同时,再比较对应字符,相同时也返回true,不同则返回false:
     String name1="Tim";String name2="Tim";System.out.println(name1.equals(name2));Test test = new Test();System.out.println(name1.equals(test));String name3=new String ("Tom");System.out.println(name1.equals(name3));//输出的结果为:truefalsefalse

让我们结合equals的源代码来了解一下其中的原理:

public boolean equals(Object anObject) {     if (this == anObject) {                       //此处比较两个变量的地址,this指代调用的是equals()方法对象的地址(此处即为name1的地址),return true;                          //anObject存的是上转型对象的地址(即name2的地址),}                                             //因为name1和name2的地址一样,所以返回trueif (anObject instanceof String) {           //此处判anObject变量所指向的对象是否为String类型,因为test不是String类,所以直接执行最后一行代码,即返回falseString anotherString = (String)anObject;//此处将上转型对象直接下转型(上转型对象不能直接调用子类新增的方法,因为Object类中没有下面要用的value.length方法,所以要下转型)int n = value.length;                    //计算出调用equals()方法的String对象的每个字符组成的char类型数组的长度(即name1的长度)if (n == anotherString.value.length) {  //比较两个对象的char类型数组的长度char v1[] = value;                 //name1的char类型数组char v2[] = anotherString.value;   //anObject所对应的字符串的字符构成的char类型数组(即name3的char类型数组)int i = 0;while (n-- != 0) {                    //对每个字符进行比较if (v1[i] != v2[i])             //若有对应字符不相同,则返回falsereturn false;i++;}return true;}}return false;}

总结一下,

  • 当变量是数字时,==仅比较数值,相同就true不同就false,但equals()除了比较数值以外,还要比较类型,两者都想同时返回true,否则返回false;
  • 当变量是字符串时, ==仅比较地址,地址相同返回true,不同返回false,(不管对应字符是否一样),而equals()方法先比较地址再比较每个字符,只有每个对应字符不同时 ,才返回false,其他都返回true。

==和equals()的作用及区别相关推荐

  1. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...

  2. equals与hashcode的区别与联系

    1."=="与equals的区别与联系 (1)"=="对于基本数据类型,只要值相等,就返回true,否则返回false. 若比较的为对象,则判断的是两个对象是否 ...

  3. java == hashcode,java中==和equals和hashCode的区别

    java中==和equals和hashCode的区别 == 的作用: 基本类型:比较的就是值是否相同 引用类型:比较的就是地址值是否相同(确切的说,是堆内存地址) equals 的作用: 引用类型:默 ...

  4. 【JAVA基础篇】==、equals和hashCode的区别和联系

    == 作用:比较两个操作数的关系,返回一个boolean类型的结果 具体含义:如果两个操作数是基本数据类型,比较值是否相等.如果两个操作数是引用类型,那么比较的是内存地址是否相同. equals Ob ...

  5. Spring中SmartLifecycle和Lifecycle的作用和区别

    欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...

  6. ANDROID 中UID与PID的作用与区别

    ANDROID 中UID与PID的作用与区别 PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统 ...

  7. python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用

    python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用(3-20181205) 文章目录: 一. @staticmetho ...

  8. Jar/War/Ear等包的作用与区别详解

    Jar/War/Ear等包的作用与区别详解 以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.ja ...

  9. java ear war_[转] 基于Java的打包jar、war、ear包的作用与区别详解

    以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果.除jar以外对于J2EE来说还有war和ear.区 ...

最新文章

  1. Oracle数据库用户角色、表空间创建、删除命令
  2. 初步了解win32界面库DuiLib
  3. 与Oracle配套组件,oracle 组件和体系结构
  4. 使用async,await关键字进行API Access Token的获取
  5. 163相册密码破解 - 简单版
  6. C# SuperSocket服务端入门(一)
  7. python3生成器与迭代器_Python3迭代器与生成器
  8. 洗点,现金1100G
  9. 黑客游戏未发先被黑:游戏开发商Ubisoft 和 Crytek遭勒索攻击
  10. chrome 通过插件来监控zabbix
  11. 1.Oracle 安装教程及使用
  12. linux在虚拟机添加一块10,redhat linux 虚拟机如何增加一块虚拟硬盘
  13. 【笔记】QCA9531无线校准
  14. 华硕php55超频,一款软件轻松搞定 华硕Armoury Crate超频体验
  15. 华为PUSH推送所有Token都不合法
  16. DRAM知识整理系列(三):部分时序参数整理
  17. 导入导出excel表格EasyExcel操作
  18. java 不生成文件下载_java – 浏览器不生成文件下载对话框
  19. STM32 软件 I2C Source Files (No Clock Strech)
  20. Java实现8枚硬币问题(减治法)

热门文章

  1. 快速求斯特林数总结(洛谷模板题解)
  2. Nginx+Apache Yii2.0 配置方案
  3. vmware克隆centos修改linux mac地址
  4. SQL SERVER 获取表结构信息《转载》
  5. ASP.NET中使用MD5和SHA1算法加密
  6. web标准,我们去向何方?一些想法...
  7. DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子
  8. ImageNet图像数据集介绍
  9. Intel TBB简介及在Windows7 VS2013上源码的编译过程
  10. matlab神经网络工具箱函数汇总