zoukankan      html  css  js  c++  java
  • String hashcode的兴趣试玩

    今天突然看到Hashcode和equals,==比较时,一时兴起,想了解一下hashcode生成规则,为什么hashcode相同,无法说明对象相等,但用equals说明相同,却可以推出对象的hashcode一定相等,带着这个疑问做了如下实验:

    实验结论:实验证明"1x","3:","2Y"明显不同,但他们的hashcode却出乎意料的完全相同为1639;(这只是举个例子,应该还有其他一些可能)

    现在附String的hashcode源码逻辑:

    结论:

    “2Y”.hashcode=1639 可以推导出:“2Y2”.hashcode=31*1639+50   其中,50是字符“2”的accii值;

    所有可以清楚明白:equals证明的相等,其hashcode一定相同,但hashcode相同,不一定是同一个对象;

    而关于equals 和 ==   

    equals:其中数值类型的对象类型做比较时使用,逻辑:先比较类类型是否一致,再比较值是否相等(此时是先转换成基础类型在用==比较)

    ==: 数字类型的基础类型做比较时使用,比如:boolean,int,char等等,进行值比较是否相同

  • 相关阅读:
    基于Linux的v4l2视频架构驱动编写
    eclipse中的快捷键
    单例模式
    Java集合之LinkedHashMap
    Java集合之HashMap
    Java集合之LinkedList
    Java集合之ArrayList
    Java垃圾回收机制
    JVM的内存区域划分
    Java并发编程:Thread类的使用
  • 原文地址:https://www.cnblogs.com/outpointexception/p/8555456.html
Copyright © 2011-2022 走看看