Java 中哈希码的说明「建议收藏」

Java 中哈希码的说明「建议收藏」在Java中,哈希码代表对象的特征。例如下面代码对象根据HashCode由此可得出str1!=str2,str1==str3哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。2:String类的hashCode.根据String类包含的字符串的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

概念

在Java中,哈希码代表对象的特征

例如下面代码对象

String str1 = “aa”, str1.hashCode= 3104
String str2 = “bb”, str2.hashCode= 3106
String str3 = “aa”, str3.hashCode= 3104

Jetbrains全家桶1年46,售后保障稳定

根据HashCode由此可得出str1!=str2,str1==str3

哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。

常用的哈希码的算法

1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。

3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。

Object对象默认的toString()中的哈希码

假如.直接输出一个实例对象,出现一串字符串,代表什么?
在这里插入图片描述
运行如下:
在这里插入图片描述

直接输出一个类的对象的时候,会调用这个类的toString()方法,这个方法有些类是覆盖了的,比如String,Integer。你自己写的类没有覆盖这个方法的话就是继承Object类的这个方法,Object中toString()方法的实输出格式是这样的getClass().getName() + “@” + Integer.toHexString(hashCode()) 后面跟的是这个类的哈希码,如果你希望这个类打印出来输出你希望的格式,你就要覆盖这个、toString方法。

测试案例

哈希码比较探究1

public static void main(String[] args) { 
   
	String str1 = "aa"; // str1.hashCode = 3106;
	System.out.println(str1);
	System.out.println(str1.hashCode());
	String str2 = "bb"; // str2.hashCode = 3106;
	String str3 = "aa"; // str3.hashCode = 3104;
	
	System.out.println(str1==str2);
	System.out.println(str1.hashCode()==str2.hashCode());
	System.out.println(str1==str3);
	System.out.println(str1.hashCode()==str3.hashCode());
	System.out.println("==========");
	
	String str4 = "重地";
	String str5 = "通话";
	System.out.println(str4.hashCode()==str5.hashCode());
}

运行结果如下:
在这里插入图片描述

哈希码比较探究2

public class HashCodeTest { 
   
    class Person
    { 
   
        public String name;
        public Person(String n)
        { 
   
            this.name=n;
        }
        public Person(){ 
   }
    }
    public static void change(Person a)//改变对象a的name值
    { 
   
        a.name="haha";
    }
    public static void main(String[] args) { 
   
        HashCodeTest t=new HashCodeTest();
        Person p=t.new Person("zhangsan"); //实例一个对象p
        Person a=t.new Person();//又实例一个对象a
        System.out.println("未赋值前,两者的哈希码是不相同的:");
        System.out.println("a.hashCode="+a.hashCode()+" "+"p.hashCode="+p.hashCode());
        System.out.println("a.toString()="+a.toString());
        System.out.println("p.toString()="+p.toString());
        /* 未赋值前,两者的哈希码是不相同的: a.hashCode=366712642 p.hashCode=1829164700 a.toString()=new_start1.Test1$Person@15db9742 p.toString()=new_start1.Test1$Person@6d06d69c */
        a=p;
        System.out.println("赋值后,两者的哈希码相同:");
        System.out.println("a.hashCode="+a.hashCode()+" "+"p.hashCode="+p.hashCode());
        System.out.println("a.toString()="+a.toString());
        System.out.println("p.toString()="+p.toString());
        /* 赋值后,两者的哈希码相同: a.hashCode=1829164700 p.hashCode=1829164700 a.toString()=new_start1.Test1$Person@6d06d69c p.toString()=new_start1.Test1$Person@6d06d69c */
    }
}

运行结果如下:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213432.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于物品的协同过滤算法:理论说明,代码实现及应用「建议收藏」

    基于物品的协同过滤算法:理论说明,代码实现及应用「建议收藏」基于物品的协同过滤算法:理论说明,代码实现及应用标签:爬虫Python主要参考资料:项亮.推荐系统实践[M].北京:人民邮电出版社,2012.转载请注明出处:sss0.一些碎碎念从4月中旬开始,被导师赶到北京的郊区搬砖去了,根本就没有时间学习看书,这个时候才知道之前的生活是多么的幸福:每天看自己想看的书,然后实践一下,最后写博文总结一下,偶尔还能去跑个步,游个泳。想找实习的计划也泡汤了

    2022年6月26日
    23
  • 网络编程之粘包问题

    什么是粘包粘包是一种现象这种现象只出现在TCP中而不会出现在UDP中(TCP和UDP都是传输层中的协议)粘包概念详解:当发送网络数据时,tcp协议会根据Nagle算法将时间间隔短,数据量小的多

    2022年3月29日
    49
  • 数据库连接泄露的问题有哪些_数据库自身的安全风险

    数据库连接泄露的问题有哪些_数据库自身的安全风险对于应用开发者来说,数据连接泄漏无疑是一个可怕的梦魇。如果存在数据连接泄漏问题,应用程序将因数据连接资源的耗尽而崩溃,甚至还可能引起数据库的崩溃。数据连接泄漏像黑洞一样让开发者避之唯恐不及。SpringDAO对所有支持的数据访问技术框架都使用模板化技术进行了薄层的封装。只要您的程序都使用SpringDAO模板(如JdbcTemplate、HibernateTemplate等)进行

    2022年9月16日
    1
  • microsoft setup bootstrapper 已停止工作

    microsoft setup bootstrapper 已停止工作安装office2013提示:microsoftsetupbootstrapper已停止工作

    2022年7月20日
    41
  • Ubuntu 安装mysql和简单操作

    ubuntu上安装mysql非常简单只需要几条命令就可以完成。http://hovertree.com/menu/mysql/1. sudoapt-getinstallmysql-s

    2021年12月24日
    35
  • 墙裂推荐4款js网页烟花特效

    以下是几款网页特效和一款软件:http://keleyi.com/keleyi/phtml/jstexiao/2.htmhttp://keleyi.com/keleyi/phtml/html5/14

    2021年12月22日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号