- 制片地区
- 美国
- 主 演
- 尼古拉斯·霍尔特,克里斯汀·斯图尔特,盖·皮尔斯
- 上映时间
- 2016年7月1日(美国)
- 色 彩
- 彩色
- 导 演
- 德雷克·多雷穆斯
- 其它译名
- 完人世界(台湾)、对等物、完人世界
- 类 型
- 剧情、爱情、科幻
- 拍摄日期
- 2014年8月4日
- 中文名
- 同等族群
- 片 长
- 101分钟
- imdb编码
- tt3289728
- 外文名
- Equals
- 编 剧
- 内森·帕克
- 对白语言
- 英语
- 制片人
- 迈克尔·谢弗
- 拍摄地点
- 日本、新加坡
-
equals和hashcode总结
2019-07-31 18:37:06equals和hashcode总结: 1.equals方法没有重写的话,用于判断对象的内存地址引用是否是用一个地址。重写之后一般用来比较对象的内容是否相等(比如student对象,里面有姓名和年龄,我们重写 equals方法来判断只要...equals和hashcode总结:
1.equals方法没有重写的话,用于判断对象的内存地址引用是否是用一个地址。重写之后一般用来比较对象的内容是否相等(比如student对象,里面有姓名和年龄,我们重写
equals方法来判断只要姓名和年龄相同就认为是用一个学生)。
2.hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值,当然你也可以重写它,hashcode方法只有在集合中用到。
3.对象放入集合中时,先判断hashcode是否相等,再判断equals是否相等,都相等就算是同一个对象,list则可以放入,set因为不允许重复所以不会放入。
4.例如:
public class Student {
private int age;
private String name;
public Student(int age ,String name){
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//重写equals方法,判断姓名和年龄相同就是相等的
public boolean equals(Object o){
if(o == null){
return false;
}
if(this.getClass() != o.getClass()){
return false;
}
Student student = (Student)o;
if(name == null){
return false;
}
if(age==student.getAge()&&name.equals(student.getName())){
return true;
}
return false;
}
public static void main(String[] args) {
Student studentOne = new Student(1,"yjc");
Student studentTwo = new Student(1,new String("yjc"));
System.out.println(studentOne.equals(studentTwo));
System.out.println("1: "+studentOne.getName().hashCode());
System.out.println("2: "+studentTwo.getName().hashCode());
}
//输出结果:true
1: 119666
2: 119666
}
以上可以看出,两个String都叫"yjc",无论是直接"yjc"还是new String("yjc"),他们的hashcode都相同。所以在重写hashcode方法时可以运用这一点。
比如你希望如果姓名和年龄相同,不仅equals相同,他们的hashcode也要相同,可以这样重写hashcode:
public int hashcode(){
final int prime = 31;
int result = 1;
result = prime*result + age;
result = prime*result + (name == null? 0 : name.hashcode());
return result;//直接写age+(name == null? 0 : name.hashcode())也行就是感觉太简单了0.0
}
这样一来两个姓名和年龄相同的Student对象就是同一个对象了,放入set中会被认为是同一个,无论放几个这样的对象,set.size()都是等于1。
同样,HashMap因为key也是唯一的,HashMap对象是根据其Key的hashCode来定位存储位置,并使用equals(key)获取对应的Value,所以在put时判断key是否重复用到了hashcode和equals,若重复了则会覆盖。
-
equals
2019-06-03 23:44:20equals 和 ==的区别 ==比较对象的是地址是否相同 equals如果子类中没有重写,默认调用Object类中的equals方法,比较的是地址,但是可以重写,自定义比较规则,按照内容比较对象是否相同 String类中的equals 是比较字符串...equals 和 ==的区别
== 比较对象的是地址是否相同
equals如果子类中没有重写,默认调用Object类中的equals方法,比较的是地址,但是可以重写,自定义比较规则,按照内容比较对象是否相同
String类中的equals 是比较字符串是否相同( 被重写过的equals方法 )
public class TestEquals { public static void main(String[] args) { String s1 = new String("aaa"); String s2 = new String("aaa"); System.out.println(s1==s2);//这里的==比较地址是否相等 System.out.println(s1.equals(s2));//比较字符串是否相等的方法 } }
-
Equals
2015-04-26 15:14:34 -
为什么重写equals一定要重写hashcode?
2018-05-24 23:55:10Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的引言
这篇文章已经是我很久之前写的,其中的内容表述得不太清楚,或多或少难以让人信服,于是我又写了一篇,链接如下:
CSDN链接:重新认识equals和hashCode方法 微信公众号链接:深入理解equals和hashCode 希望点进去的小伙伴关注一下我的公众号哟,文末有二维码,谢谢!
正文
大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白,以下是我的一些个人理解。
这是Object类关于这两个方法的源码,可以看出,Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的。
上图展示了Student类的重写后的equals方法和hashcode方法,建议大家用eclipse自动生成,尽量不要自己敲因为很有可能会出错。
现在有两个Student对象:
- Student s1=new Student("小明",18);
- Student s2=new Student("小明",18);
此时s1.equals(s2)一定返回true
- 假如只重写equals而不重写hashcode,那么Student类的hashcode方法就是Object默认的hashcode方法,由于默认的hashcode方法是根据对象的内存地址经哈希算法得来的,显然此时s1!=s2,故两者的hashcode不一定相等。
- 然而重写了equals,且s1.equals(s2)返回true,根据hashcode的规则,两个对象相等其哈希值一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode,而且从Student类重写后的hashcode方法中可以看出,重写后返回的新的哈希值与Student的两个属性有关。
以下是关于hashcode的一些规定:
- 两个对象相等,hashcode一定相等
- 两个对象不等,hashcode不一定不等
- hashcode相等,两个对象不一定相等
- hashcode不等,两个对象一定不等
我的二维码
觉得写得不错的小伙伴,扫码关注一下我的公众号吧,谢谢呀!
-
equals方法
2018-06-28 19:50:31因为Java中所有类都继承自Object类,所以Java中的所有对象都有equals方法。 /** * Object类默认的equals()方法 */ public boolean equals(Object obj) { return (this == obj); } 重写equals方法 Object的... -
Java equals 与 Objects.equals
2019-01-17 09:21:00a.equals(b) 当 a 是 null 的时候,抛出 NullPointerException 异常 a.equals(b) 当 a 不是 null,b 是 null 的时候,返回 false Objects.equals(a,b) 比较时,a 或者 b 即使是 null 时,也不抛异常 null.equals(&... -
实现equals方法诀窍
2016-07-16 16:41:25equals -
重写equals
2016-08-29 13:14:29重写equals -
Java equals
2017-07-15 17:00:54Java中用equals方法来判断两个对象是不是相等,equals方法是Object类就拥有的方法,因而属于所有对象通用的方法,使用方式很简单:a.equals(b) ,返回true或false。下面进入正题。什么时候才应该覆盖equals方法 ... -
equals原理
2019-06-20 17:47:53在java中,"=="和"equals()"区别是什么? 恐怕大多数人都会回答,第一个是用来比较地址,第二个是用来比较内容的吧。这个回答并不准确 例如 输出的结果为false,而用String输出的却是true 这是为什么呢? 查看object... -
== 和 equals 的区别
2019-04-04 18:23:41== 和 equals 的区别是什么? 使用 == 比较 Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。 引用数据类型,比较的是他们在堆内存地址是否相等。每新new一... -
重写hashcode和equals方法
2019-05-07 21:55:43我们都知道,要比较两个对象是否相等时需要调用对象的equals()方法,即判断对象引用所指向的对象地址是否相等,对象地址相等时,那么与对象相关的对象句柄、对象头、对象实例数据、对象类型数据等也是完全一致的,... -
equals和Objects.equals的区别
2019-01-23 19:44:48equals大部分情况下用来比较两个字符串是否相同.例如下面的代码 public static void main(String[] args) { Student s1 = new Student("二狗",14); Student s2 = new Student("三狗",15); ... -
枚举 equals_Java枚举equals()方法与示例
2020-07-24 02:55:11枚举 equals 枚举类equals()方法 (Enum Class equals() method) equals() method is available in java.lang package. equals()方法在java.lang包中可用。 equals() method is used to check equality or inequality... -
重写equals方法
2019-12-02 17:23:40重写equals方法 相信在每个人都有过重写过java的equals的方法的经历。这篇博文就从以下几个方面说明重写equals方法的原由,与君共进步。 一 为什么要重写equals方法 首先我们了解equals方法的作用是什么? java的... -
object类中的equals与自定义equals方法详解
2020-04-29 16:31:56object类中的equals与自定义equal方法详解 this怎么了解?this == obj表示什么? /*Object 类中的 equals() 方法*/ Object 类中的 equals() 方法 public boolean equals(Object obj) { return (this == obj);... -
Java常用API——equals方法 & equals方法的重写
2020-02-25 22:14:42Java常用API——equals方法 & equals方法的重写 -
equals和hashCode的约定(重写equals必须重写hashCode)
2020-08-08 14:05:44为什么重写equals必须重写hashCode 1. Object中equals、hashCode public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } 首先看一下equals方法,Object中默认比较两个对象... -
equals 和 ==, equals 和 hashcode
2016-05-31 02:39:10equals 和 ==, equals 和 hashcode -
java的equals方法_Java Date equals()方法与示例
2020-07-24 03:04:31java的equals方法 日期类equals()方法 (Date Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this date... -
equals使用
2017-05-10 08:09:07编写equals方法的建议** 1)显示参数命名为otherObject,稍后需要将它转称另一个叫作other的变量; 2)检测this与otherObject是否引用同一个对象: if(this==otherObject) return ture; 3)检测otherObject是否为null,...
-
《STL源码剖析》学习笔记:Ch2空间配置器
-
SQL练习
-
html+css,vs code前端必备插件
-
一文精通FastJson(入门教程)
-
寒假回顾
-
基于Qt的LibVLC开发教程
-
pycharm远程连接linux开发项目
-
MySQL 高可用工具 DRBD 实战部署详解
-
彻底弄懂HTTP缓存机制——基于缓存策略三要素分解法
-
MySQL Router 实现高可用、负载均衡、读写分离
-
MySQL 多实例安装 及配置主从复制实验环境
-
【DVWA】SQL Injection-----------------------low
-
Linux基础入门系列课程
-
K-39(Cs-133)-Rb-85-He-4混合光泵浦自旋交换弛豫自由原子磁强计的偏振和基本灵敏度
-
Femtosecond laser ablation of silicon in air and vacuum
-
信号流程图理论分析多环谐振滤波器特性
-
2020-2021学年广州市第十中学八年级第一学期Unit1单元测试题
-
JMETER 性能测试基础课程
-
Unity ILRuntime框架设计
-
基于太赫兹超材料的纳米粒子掺杂薄膜感测