当前位置: 首页 > news >正文

Java基础(6)

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?关于深拷贝和浅拷贝区别,我这里先给结论:浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。上面的结论没有完全理解的话也没关系,我们来看一个具体的案例!浅拷贝浅拷贝的示例代码如下,我们这里实现了 Cloneable 接口,并重写了 clone() 方法。clone() 方法的实现很简单,直接调用的是父类 Object 的 clone() 方法。

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

关于深拷贝和浅拷贝区别,我这里先给结论:

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。0a925a6f073b461a8f9df992dcf95ada.png

 hashCode() 有什么用?

hashCode() 的作用是获取哈希码(int 整数),也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。

4c190c9436f44305aa934b4bf35b20c5.png hashCode() 定义在 JDK 的 Object 类中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。另外需要注意的是:Object 的 hashCode() 方法是本地方法,也就是用 C 语言或 C++ 实现的。⚠️ 注意:该方法在 Oracle OpenJDK8 中默认是 "使用线程局部状态来实现 Marsaglia's xor-shift 随机数生成", 并不是 "地址" 或者 "地址转换而来", 不同 JDK/VM 可能不同在 Oracle OpenJDK8 中有六种生成方式 (其中第五种是返回地址)

散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)为什么要有 hashCode?我们以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode?下面这段内容摘自我的 Java 启蒙书《Head First Java》:

当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashCode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashCode 值作比较,如果没有相符的 hashCode,HashSet 会假设对象没有重复出现。但是如果发现有相同 hashCode 值的对象,这时会调用 equals() 方法来检查 hashCode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。这样我们就大大减少了 equals 的次数,相应就大大提高了执行速度。

 

 

 

 

http://www.lryc.cn/news/461811.html

相关文章:

  • [JAVAEE] 线程安全问题
  • k8s 集群给用户生成 kubeconfig 文件
  • (八)Proteus仿真STM32单片机GPIO驱动数码管
  • Python进阶知识1
  • 单片机设计|基于STM32实现具有室内定位功能的智能手环的设计
  • 计算机网络——运输层(可靠传输、超时重传、选择确认、流量控制和拥塞控制、TCP连接和释放)
  • Web安全实践
  • 【算法篇】动态规划类(2)——01背包+完全背包(笔记)
  • 基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码+数据库+文档+PPT)
  • 二进制漏洞利用 | 整数溢出探究
  • 10种经典的螺栓防松设计
  • 开放式蓝牙耳机哪个品牌好用?开放式耳机排行榜测评!
  • 新能源行业必会基础知识---电力现货问答---第5问---何为电力中长期市场?与电力现货市场之间有何关系?国内试点地区如何衔接?国外有哪些经验值得借鉴?
  • 如何将数据从 AWS S3 导入到 Elastic Cloud - 第 2 部分:Elastic Agent
  • DTL698电表数据 转 profinet IO协议项目案例
  • CSS @规则(At-rules)系列详解___@font-face规则使用方法
  • 如何通过CDN优化网站服务器访问速度?
  • JAVA学习-练习试用Java实现“自定义函数之字符反转”
  • 大衍数列——考研408考试科目之数据算法——未来之窗学习通
  • JVM(HotSpot):直接内存及其使用建议
  • centos7安装mysql5.7
  • 如何在JVS逻辑引擎中巧妙运用包含查询功能?
  • Spring Boot视频网站:安全与可扩展性设计
  • 深入理解 Flutter 鸿蒙版的 Stack 布局:适配屏幕与层叠样式布局
  • JavaScript中Number相关特性
  • Redis中String类型数据扩容原理分析
  • 智能码二维码zhinengma.cn在供应链管理中有哪些优势?
  • 代理商培训新策略:利用内部知识库提升培训效果
  • Redis 哨兵模式下DB库操作审计
  • latex公式输入-矩阵