Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?
Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。
equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个
分离的对象的内容和类型相配的话,返回真值。
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
方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的
由上述可见:
总结如下:
==:
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
equals():
引用类型:默认情况下,比较的是地址值,可进行重写,比较的是对象的成员变量值是否相同
Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?的更多相关文章
- Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 1.什么是Set?(what) Set是Collection容器的一个子接口,它不允许出现 ...
- 【Java面试题】39 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
1.什么是Set?(what) Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象. 2.如何来区分重复与否呢?(how) “ 用 iterator() ...
- List<string>里 每个元素重复了多少次
List<string>里 每个元素重复了多少次 static void Main(string[] args) { List<string> list = new List& ...
- 判断Set里的元素是否重复、==、equals、hashCode方法研究-代码演示
被测试类,没有重写hasCode()和equals()方法: package niukewang; import java.util.Objects; public class setClass { ...
- 将数组里的元素拼接成sql里的in条件
/** * 将数组里的元素拼接成sql里的in条件,如'a1','a2','a3' * @param array * @returns */function makeSqlInStr(array){ ...
- 获取Iframe页面高度并赋值给Iframe以及获取iframe里的元素
最近接手了别人的项目,别人用到了iframe,自己在实战中总结了一些关于iframe的小问题. 获取Iframe页面高度并赋值给Iframe Html <iframe name="co ...
- 不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁
不要在 foreach 循环里进行元素的 remove/add 操作.remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁. 正例: Iterator&l ...
- wpf如何获取control template里的元素
wpf中的控件模板里的元素有自己独立的命名域. 因此不能通过FindName来根据x:Name来查找子节点. 自己写了一个方法, 通过可视树遍历子节点,然后匹配名字. 如下: private stat ...
- 为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?
在阅读<阿里巴巴Java开发手册>时,发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约,具体内容如下: 错误演示 我们首先在 IDEA 中编写一个在 f ...
随机推荐
- java遍历复杂json字符串获取想要的数据
https://blog.csdn.net/qq_34309663/article/details/80508125 java如何解析复杂的json数据关于json处理的包有好几个,比如jackson ...
- css清除默认样式,stylus学习
reset.css html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, ...
- 根据json生成c#实体类
vs 编辑->选择性粘贴->将json粘贴为类
- 通过工厂方法配置Bean
前面几节,我们配过了好多Bean,通过反射机制,在class属性里填写全类名,现在我们来讲讲其他方式,通过工厂方法,还有通过FactoryBean,这个在我们整合第三方框架时会用到. 工厂方法可以分为 ...
- Python之路1-变量、数据类型、循环语法
1.python语言介绍 编程语言主要从以下几个角度进行分类,编译型和解释型,静态语言和动态语言,强类型定义语言和弱类型定义语言. 编译和解释区别 编译器是把源程序的每一条语句都编译成机器语言,并保存 ...
- fiddler软件测试——Fiddler抓取https设置详解(图文)(摘抄)
随笔- 8 文章- 0 评论- 0 fiddler软件测试——Fiddler抓取https设置详解(图文) 强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说 ...
- Insert Into select 与 Select Into 哪个更快?
在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SELECT INTO : 那么二者语法上有什么区别?性能上又如何呢? 围绕着这两个 ...
- BATCH+VBS脚本自动执行命令
打开cmd,然后执行run.bat s 1就会执行tmpsw.vbs的内容,1是作为id传进去的参数. run.bat: @echo off set type=%1 set id=%2 :打开一个te ...
- mysql慢查询日志按天切割归纳
问题描述: mysql开启慢查询功能,再正常不过,那么存在这样一种情况:慢查询写入的文件位置和文件名是指定好的,如果慢查询时间设定严苛,不出意外,记录慢查询的单个文件大小会日益增大,几十兆或者上百兆, ...
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...