前面3篇研习了Byte,Short,Integer,这篇把剩余的Long,Float,Double分析完。
有了Integer的经验,Long就简单多了,只是32位变64位嘛。粗粗扫一下就可以了。不过有个方法和Integer不同
static int stringSize(long x) {
long p = 10;
for (int i = 1; i < 19; i++) {
if (x < p)
return i;
p = 10 * p;
}
return 19;
//这个和Integer算法不一样了,再罗列缓存,9太多了,容易出错,直接每次乘以10来判了
}
接下来Float,Double不简单了,一上来import4个类,且代码没有,以后研究
import sun.misc.FloatingDecimal;
import sun.misc.FpUtils;
import sun.misc.FloatConsts;
import sun.misc.DoubleConsts;
public static String toString(float f) {
//这个估计算法很复杂吧,FloatingDecimal的源码
return new FloatingDecimal(f).toJavaFormatString();
}
随之发现Float,Double里面怎么很多方法都是空的啊,转而都是调用上面import的4个类,而这4个类JDK自带的src.zip里可没有source,不过现在可以到SUN的网站下载全部源码了,我也下了一份,看来一下子要全部看完是不可能的了。感兴趣的研究吧!
总之,我们算是大致看完了Number的几个主要子类吧。没有贴全部代码,我只是把看到的精华贴出来。最后觉得要研究source,还是要自己静下心来自己看,不懂的再上网查资料,这样定有收获。还要记笔记,我发觉不记笔记过一阵子就忘了。这几篇文章也只是我的一些笔记,一些愚见,大家不吝指正。