博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
equals与==的区别
阅读量:5097 次
发布时间:2019-06-13

本文共 1284 字,大约阅读时间需要 4 分钟。

术语来讲的区别:

1.==是判断两个变量或实例是不是指向同一个内存空间    equals是判断两个变量或实例所指向的内存空间的值是不是相同

2.==是指对内存地址进行比较    equals()是对字符串的内容进行比较

3.==指引用是否相同    equals()指的是值是否相同

 

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存

储的数值是否相同, 要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作
符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,
对象本身占用一块
内存(
堆内存),变量也占用一块内存,例如 Objet obj = new Object();变量 obj 是一个内存,
new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那
块内存的
首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即
要看这两个变量所对应的内存中的数值是否相等,这时候就需要用
==操作符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相
同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条 new 语句创建了两个对象,然后用 a/b 这两个变量分别指向了其中一个对象,这是两
个不同的对象,它们的首地址是不同的,即
a b 中存储的数值是不相同的,所以,表达
a==b 将返回 false,而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返回
true
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,
String input
=
;input.equals(quit),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上
找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都
是使用
equals 方法。
如果一个类没有自己定义
equals 方法,那么它将继承 Object 类的 equals 方法, Object
equals 方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义 equals 方法,它默认的 equals 方法(从 Object 类继承
的)就是使用
==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用
equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回 false。如果你
编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖
equals
方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

 

转载于:https://www.cnblogs.com/fifiyong/p/5830681.html

你可能感兴趣的文章
PyQt5--EventSender
查看>>
深入浅出Symfony2 - 结合MongoDB开发LBS应用
查看>>
android 通过AlarmManager实现守护进程
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
win7下把电脑设置成wlan热
查看>>
Java 多态 虚方法
查看>>
jquery.validate插件在booststarp中的运用
查看>>
java常用的包
查看>>
PHP批量覆盖文件并执行cmd命令脚本
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
支持向量机——内核
查看>>
MFC注册热键
查看>>
万能的SQLHelper帮助类
查看>>
三种方式创建Angular的自定义服务
查看>>
如何在 Terminal 内可以“用惯用的编辑器”快速打开“目前正在做”的专案(project)呢?...
查看>>
uboot分析:uboot的启动过程分析
查看>>
tmux的简单快捷键
查看>>
springboot笔记04——读取配置文件+使用slf4j日志
查看>>
[Swift]LeetCode653. 两数之和 IV - 输入 BST | Two Sum IV - Input is a BST
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>