Java 中new Date()之hashCode
来源:互联网 发布:如何用java做网站 编辑:程序博客网 时间:2024/04/30 01:25
下面先看一段简单的demo
public class Test_01 {//主要看控制台输出和气质。。。 public static void main(String[] args) { //运行代码你会怀疑date和date1是同一个对象吗? List list = new ArrayList<>(); Date date = new Date(); list.add(date); System.out.println(date.hashCode()); System.out.println(list.size());//如果你怀疑是同一个对象,请加上如下demo再试试/*try {new Thread().sleep(1);} catch (InterruptedException e) {e.printStackTrace();}*/ Date date1 = new Date(); list.remove(new Date()); System.out.println(date.hashCode()); System.out.println(list.size()); }}
没有加上注释的demo时,输出的两个hashCode是相同的值,加上注释后的demo后,输出的两个hashCode的值是不同,有没有想过为什么?只不过是Date类重写了equals方法和生成hashCode的方法而已,在Date类的源码中生成hashCode的方法如下
public int hashCode() { long ht = this.getTime(); return (int) ht ^ (int) (ht >> 32);}
Date源码中比较两个对象是否相等的equals方法如下
public boolean equals(Object obj) { return obj instanceof Date && getTime() == ((Date) obj).getTime();}
看到这里大家心里应该明白为什么会出那样的问题了吧。
Date类重写了生成hash码的方法,以系统时间为参照生成当前对象的hash码,因此,如果在同一时间做new Date()操作,那么在这个运算下生成的hashCode就是相等,因此在Date类重写的equals方法中做判断返回的值也是true。
0 0
- Java 中new Date()之hashCode
- java new date 格式
- Delphi中实现java中new Date().getTime()方法
- JS之new Date().getTime()
- new Date() 之高考倒计时
- ie中new date 解决方案
- Java 时间格式 new Date()
- Java之hashCode()函数
- Java Object 之hashCode
- Java之hashcode方法
- Java之equals()、hashcode()
- Java基础之hashcode
- java中HashCode使用
- 关于JAVA中hashCode
- java中hashCode()
- Java中hashCode详解
- JAVA中 hashcode && equals
- java 中hashcode作用
- SQL注入
- DebugView
- TCP /IP 协议- (网络层)ARP、 RARP、ICMP、IGMP协议
- Windows——Vmware 12安装Ghost XP
- error: use of deleted function boost::shared_ptr 问题解决
- Java 中new Date()之hashCode
- 程序语言设计(第一天学习)
- 《30天自制操作系统》学习笔记(六)
- bzoj1565【NOI2009】植物大战僵尸
- LeetCode-分类题解
- 重叠区间的个数
- Day04 Application 的使用
- 得来全不费功夫
- argc argv