ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Object类方法解析

2021-05-29 13:01:25  阅读:149  来源: 互联网

标签:相等 对象 clone Object equals hashcode 解析 方法


备注:复习java基础,仅作学习笔记用

hashcode()和equals()

public native int hashCode();

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

1.1作用

两者都是为了比较对象是否相等

1.2区别

  • 性能:hashcode()默认本地方法实现,是对象在内存中的地址的数字化表现,将内存地址转换为某串hash值;equals方法如果是重写了往往是针对对象属性比较,比较复杂,所以从性能或效率角度上看,hashcode()效率高于equals();
  • 可靠性:由于hashcode()计算公式的问题,可能导致不同的对象生成的hashcode()一致,而equals则是比较全面,所以我们能得出:equals相等的两个对象其hashcode()一定相等,但hashcode()相同的两个对象equals不一定相等。所以从可靠性角度上看,equals()可靠性高于hashcode();

1.3注意事项

  • 考虑性能问题,由于hashcode()性能优于equals(),所以在需要大量比对时会优先选hashcode()判断,如果hashcode()不相同,则两对象一定不相等,如果hashcode()相同,再用equals()比较,保证效率和正确性;
  • 当使用HashMap/Hashtable/HashSet等容器时,要求Map的key或Set的对象不能重复,它们内部的比较也是通过先比较hashcode(),hashcode()相同再比较equals(),所以对于Map的key或Set的对象,必须要重写hashcode()和equals();

引申阅读:重写equals方法和hashcode方法那些事

getClass()

通过getClass()获取获取Class对象,利用Class对象操作反射获取对象、对象属性及方法

protected native Object clone() throws CloneNotSupportedException;

反射相关知识:Java反射知识

clone()

用于创建对象并返回对象拷贝,属于浅拷贝,可通过super.clone()或实现Cloneable接口来调用clone()

引申阅读:java中的深浅拷贝

 

 

标签:相等,对象,clone,Object,equals,hashcode,解析,方法
来源: https://blog.csdn.net/fanrenxiang/article/details/117380816

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有