码迷,mamicode.com
首页 > 其他好文 > 详细

JDK 源码 阅读

时间:2015-04-14 20:11:13      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:java   jdk   

To be continuing....... 

持续修改中。。。。


1. StringBuffer

所处类层次


易忽略点:

- 这个类是线程安全的。 所有的method直接或间接加synchronized。 所以我们如果是单线程情况下也考虑到这个会不会影响到效率。当然可能JIT可以进行这个优化,待我接下来验证。

- 默认情况下一个长为16个字符的数组被创建来存储字符串。



相关学习点:

- 当我们把Long, Integer 加到其中时。我们要先技术这个数字要多少个字符来存放。 这里的小技巧即使 用正数来求,负数加一。在求正数时,从1位开始比较1位必定小于10,接下来2位的必定小于100,以此类推。在计算integer要占的字符数时,边界值是直接缓存于数组中的。


2. Integer/Long

相关学习点:

- 在 Long 的package 方法getChars中有一整数乘法的为计算转化。   例如 a * 100 可以转化为 (a<<6) + (a<<5) + (a<<2) 。 原因就是 100的二进制为 1100100 。

- 在小于65536(10000 0000 0000 0000)的整数除10的整数运算中。我们可以把这个运算转换为快速的位运算。 a/10(整数运算)  --->  (a * 52429) >>> (16+3)。 这里 1<< 19 = 524288.   52429/524288 = 0.10000038146972...   说到这就明白了。  但还是有一点是为什么选择19,不是20也不是18. 原因是 52429 < 65536 ,  所以a 是16位内的数 52429乘上后不会越过整型的正数的界。同时取小于19的值 计算精度会低于取19。


本文出自 “洪流的博客” 博客,请务必保留此出处http://simonwzing.blog.51cto.com/3896700/1632200

JDK 源码 阅读

标签:java   jdk   

原文地址:http://simonwzing.blog.51cto.com/3896700/1632200

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!