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

Java源码中有哪些细节可以参考?(持续更新)

欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。

目录

  • String的比较
  • final的使用
  • transient避免序列化

String的比较

![[Java源码中有哪些细节可以参考?.png]]

以HashMap源码为例,涉及到String比较,先比较内存地址,再用equals方法比较值。
==对于引用类型比较的是对象的内存地址。这是一个非常底层、快速的整数比较操作。比equals()开销小很多。
这种写法是JDK中常见的性能优化手段,特别是在需要频繁比较对象的场景下。
对于String来说,如果都在字符串常量池那么理论上仅使用==就够了。

final的使用

源码中final的运用比在业务代码中多的多。
final明确了哪些东西是不可变的、防止意外修改,增强了代码的可读性、可维护性、健壮性与安全性。
还有final+局部变量的运用,比如final Object[] items = this.items。不直接操作this.items,而是重新在方法中声明一个final修饰一个局部变量。
局部变量的访问速度往往更快(微微微微快),其在栈中,访问局部变量少了堆内存寻址操作。且将类成员变量赋值给局部变量后,在方法内部使用局部变量可以减少锁的争用,提高程序的执行效率。

transient避免序列化

可以看到基于数组实现的结构基本上都使用了transient来避免多余的序列化。
很多时候基于功能考虑,我们往往在对象中抽象、设计一些无用的标识,此时使用transient避免序列化可以提升效率。

此外,使用transient 往往伴随着自定义序列化逻辑来控制逻辑内容展示。

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

相关文章:

  • GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作
  • day 23 机器学习管道(pipeline)
  • shell编程笔记
  • 鸿蒙仓颉开发语言实战教程:自定义组件
  • 基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
  • opencvsharp usb摄像头录像 c# H264编码
  • ch12 课堂参考代码 及 题目参考思路
  • uniapp 实现腾讯云 IM 消息已读回执
  • JavaScript 性能优化按层次逐步分析
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • div或button一些好看实用的 CSS 样式示例
  • USB充电检测仪-2.USB充电检测仪硬件设计
  • 如何查询服务器的端口号
  • AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)
  • DeepSeek R1开源模型的技术突破与AI产业格局的重构
  • 打破认知壁垒重构科技驱动美好生活 大模型义务传播计划
  • 【Web应用】 Java + Vue 前后端开发中的Cookie、Token 和 Swagger介绍
  • 本地部署AI工作流
  • 什么是VR全景相机?如何选择VR全景相机?
  • 如何创建和使用汇编语言,以及下载编译汇编软件(Notepad++,NASM的安装)
  • c++设计模式-单例模式
  • Ubuntu开机自动运行Docker容器中的Qt UI程序
  • Python训练营打卡Day40(2025.5.30)
  • SpringBoot+vue+SSE+Nginx实现消息实时推送
  • python中使用高并发分布式队列库celery的那些坑
  • 哈工大计算机系统大作业 程序人生-Hello’s P2P