博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java--equals()方法、hashCode()方法和toString()方法
阅读量:3913 次
发布时间:2019-05-23

本文共 1578 字,大约阅读时间需要 5 分钟。

如果重写 equals 方法,就必须也重写 hashCode 方法

两个对象的 hashCode 一致,那必然用equals方法判定的也是一致的。

equals()

在没有重写 equals() 方法的情况下,他与 == 一样是判断地址是否相同。

object 类的 equals() 的源码:

public boolean equals(Object obj) {    return (this == obj);}

而 String 类自己重写了 equals 方法:

String 类中的 equals() 的源码:

public boolean equals(Object anObject) {    if (this == anObject) {        return true;    }    if (anObject instanceof String) {        String aString = (String)anObject;        if (coder() == aString.coder()) {            return isLatin1() ? StringLatin1.equals(value, aString.value)                              : StringUTF16.equals(value,  aString.value);        }    }    return false;}

hashCode()

与 equals() 类似,在 object 类中一样有一个基础的定义,因此每个对象都有一个默认的散列码,其值为对象的存储地址

object 类的 hashCode() 的源码:

@HotSpotIntrinsicCandidatepublic native int hashCode();

这里只有一个 native 定义的本地方法并没有方法体,也就是说是由 c++或 c 写的方法来获取存储地址。

而在 String 类中,重写了 hashCode 方法,他的值是根据内容算出来的,并不是地址,所以说我们不能认为 hashCode 就是地址值

String 类的 hashCode() 的源码:

public int hashCode() {        int h = hash;        if (h == 0 && value.length > 0) {            hash = h = isLatin1() ? StringLatin1.hashCode(value)                                  : StringUTF16.hashCode(value);        }        return h;    }

例子:

public static void main(String[] args) {		String s = "OK";		String t = new String("OK");		System.out.println(s.equals(t));	}

输出结果为:

true

由源码可知,他们的值一样,所以hashCode一样,则equals返回为真。

toString()

无限推荐为自己定义的每一个类添加toString 方法,这是一个良好的编程习惯!

object 类的 toString() 的源码:

public String toString() {        return getClass().getName() + "@" +  Integer.toHexString(hashCode());    }

 

转载地址:http://czprn.baihongyu.com/

你可能感兴趣的文章
Git 图形化操作之合并提交记录
查看>>
Istio Pilot 源码分析(二)
查看>>
BeetleX框架详解-小结
查看>>
打造钉钉事件分发平台之钉钉审批等事件处理
查看>>
2020 中国开源年会(COSCon'20)再启程:开源向善(Open Source for Good)
查看>>
拥抱.NET 5,从自研微服务框架开始
查看>>
开源特训营 - Lesson 4 - 如何运营社区
查看>>
C# 中的 is 真的是越来越强大,越来越语义化
查看>>
简单理解CAP-BASE
查看>>
gRPC-微服务间通信实践
查看>>
Firefox 18周岁
查看>>
IdentityServer4系列 | 初识基础知识点
查看>>
自由软件基金会庆祝成立35周年
查看>>
网络知识 | 《图解TCP/IP》读书笔记(下)
查看>>
国产化之路-统信UOS /Nginx /Asp.Net Core+ EF Core 3.1/达梦DM8实现简单增删改查操作
查看>>
面试 .NET 开发,为什么也要考算法?
查看>>
BeetleX之TCP消息通讯Protobuf/TLS
查看>>
AA.Dapper升级了
查看>>
C#刷剑指Offer | 二叉树中和为某一值的路径
查看>>
你是个失败者,有什么资格说话?
查看>>