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

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

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 往往伴随着自定义序列化逻辑来控制逻辑内容展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值