==和equals()的作用及区别
"=="的作用是比较两个变量是否相等。
- 当变量是基本数据类型时,比较的是值是否相等的:相等返回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()的作用及区别相关推荐
- (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节
背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...
- equals与hashcode的区别与联系
1."=="与equals的区别与联系 (1)"=="对于基本数据类型,只要值相等,就返回true,否则返回false. 若比较的为对象,则判断的是两个对象是否 ...
- java == hashcode,java中==和equals和hashCode的区别
java中==和equals和hashCode的区别 == 的作用: 基本类型:比较的就是值是否相同 引用类型:比较的就是地址值是否相同(确切的说,是堆内存地址) equals 的作用: 引用类型:默 ...
- 【JAVA基础篇】==、equals和hashCode的区别和联系
== 作用:比较两个操作数的关系,返回一个boolean类型的结果 具体含义:如果两个操作数是基本数据类型,比较值是否相等.如果两个操作数是引用类型,那么比较的是内存地址是否相同. equals Ob ...
- Spring中SmartLifecycle和Lifecycle的作用和区别
欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...
- ANDROID 中UID与PID的作用与区别
ANDROID 中UID与PID的作用与区别 PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统 ...
- python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用(3-20181205) 文章目录: 一. @staticmetho ...
- Jar/War/Ear等包的作用与区别详解
Jar/War/Ear等包的作用与区别详解 以客户角度来看,jar文件就是一种封装格式,用户不需要知道jar包中有多少个.class格式的文件及每个文件中的功能与作用,也可以得到相应的访问的结果.ja ...
- java ear war_[转] 基于Java的打包jar、war、ear包的作用与区别详解
以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果.除jar以外对于J2EE来说还有war和ear.区 ...
最新文章
- Oracle数据库用户角色、表空间创建、删除命令
- 初步了解win32界面库DuiLib
- 与Oracle配套组件,oracle 组件和体系结构
- 使用async,await关键字进行API Access Token的获取
- 163相册密码破解 - 简单版
- C# SuperSocket服务端入门(一)
- python3生成器与迭代器_Python3迭代器与生成器
- 洗点,现金1100G
- 黑客游戏未发先被黑:游戏开发商Ubisoft 和 Crytek遭勒索攻击
- chrome 通过插件来监控zabbix
- 1.Oracle 安装教程及使用
- linux在虚拟机添加一块10,redhat linux 虚拟机如何增加一块虚拟硬盘
- 【笔记】QCA9531无线校准
- 华硕php55超频,一款软件轻松搞定 华硕Armoury Crate超频体验
- 华为PUSH推送所有Token都不合法
- DRAM知识整理系列(三):部分时序参数整理
- 导入导出excel表格EasyExcel操作
- java 不生成文件下载_java – 浏览器不生成文件下载对话框
- STM32 软件 I2C Source Files (No Clock Strech)
- Java实现8枚硬币问题(减治法)