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

正规做网站的公司搜索引擎关键词优化

正规做网站的公司,搜索引擎关键词优化,wordpress写主题,惠州做企业网站的本篇是源码分析的第二篇,上篇我们一起分析了Integer类的源码,本篇一起学习下Double类的源码,看下其实现。 一、Double类图 首先,相比Integer,Double类的源码只有1000行代码。如下是Integer及其关联类/接口的类图&#…

    本篇是源码分析的第二篇,上篇我们一起分析了Integer类的源码,本篇一起学习下Double类的源码,看下其实现。

 

一、Double类图

    首先,相比Integer,Double类的源码只有1000+行代码。如下是Integer及其关联类/接口的类图:

     通过Integer类的类图,我们总结下它的特点:

  • Double类继承自抽象类Number
  • Double类实现了Comparable接口
  • Double类使用final修饰,因此不可以有子类(不能被继承)

二、String转Double

    同Integer类似,在实际工作中,我们用的比较多的,仍然是String转Double。Java也是给我们提供了两个方法:

1、Double.parseDouble

    public static double parseDouble(String s) throws NumberFormatException {return FloatingDecimal.parseDouble(s);}

    可以看到,parseDouble并非在Double类中实现的,而是借助FloatingDecimal类去实现:

    public static double parseDouble(String s) throws NumberFormatException {return readJavaFormatString(s).doubleValue();}

    readJavaFormatString方法返回ASCIIToBinaryConverter:

static ASCIIToBinaryConverter readJavaFormatString( String in ) throws NumberFormatException {...}

    而ASCIIToBinaryConverter接口有两个方法,分别是doubleValue()和floatValue(),显而易见,分别是转double和转float的方法:

   interface ASCIIToBinaryConverter {double doubleValue();float floatValue();}

2、Double.valueOf

    另一种方法是Double.valueOf,需要注意的是,valueOf每次都是new一个Double,也就是一个新的对象。

    public static Double valueOf(String s) throws NumberFormatException {return new Double(parseDouble(s));}

    为什么Double不像Integer搞个缓存呢?浮点数不像整型,比如1和2之间就有无数个浮点数,那么又如何去实现类似IntegerCache的缓存呢?显然是不现实的! 

三、isNaN

    需要注意的一点,Double内部定义了一个非法的double值,即NaN:

    /*** A constant holding a Not-a-Number (NaN) value of type* {@code double}. It is equivalent to the value returned by* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.*/public static final double NaN = 0.0d / 0.0;

     相应的,在很多情况下,确实会产生NaN的double值,因此在使用一个double值做一些运算时,记得使用Double.isNaN去判断下该非法值并做相应的异常处理:

    /*** Returns {@code true} if the specified number is a* Not-a-Number (NaN) value, {@code false} otherwise.** @param   v   the value to be tested.* @return  {@code true} if the value of the argument is NaN;*          {@code false} otherwise.*/public static boolean isNaN(double v) {return (v != v);}

    如下代码示例:

    public static void main(String[] args) {String s = "NaN";double d = 0d;try {d = Double.parseDouble(s);} catch (NumberFormatException e) {System.out.println(e.getMessage());return;}if (Double.isNaN(d)) {System.out.println(d);return;}d = d * 2.0d;System.out.println(d);}

四、一道题目

    那么,看下这道题目输出是什么呢?

public class DoubleTest {public static void main(String[] args) {Double d1 = 100d;Double d2 = 100d;System.out.println(d1 == d2);}
}

    答案是false。原因则是上面提到的,valueOf每次都是new一个Double对象。 

    相比Integer的源码,Double源码相对简单一些。但是需要特别注意使用double时isNaN的判断,否则程序可能产生意想不到的错误。

http://www.hkea.cn/news/406304/

相关文章:

  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo
  • 网站上的代码网页怎么做的下载百度软件
  • 网站功能模块建设搜狗推广
  • 网站做推广有用吗网站页面设计
  • 做简报的网站广州搜发网络科技有限公司
  • 南乐县住房和城乡建设局网站制作网站的步骤是什么
  • 金华做网站最专业的公司搜易网提供的技术服务
  • wordpress适合门户网站吗怎么营销自己的产品
  • 常用的网站类型有哪些seo优化专员编辑
  • 网站专题框架怎么做海阳seo排名
  • 手机网站代码下载黄页网站推广服务
  • 做网站前端多少钱在线bt种子
  • wordpress+模版+推荐专业网站seo推广
  • 浦项建设公司员工网站2023免费推广入口
  • 如何查询某个网站的设计公司最新推广注册app拿佣金
  • 八宝山做网站公司打广告
  • wordpress vip查看插件南宁seo费用服务
  • 建站之星模板怎么设置手机如何做网站
  • 上海公司网站制作价格西安百度关键词排名服务
  • 长沙网页制作开发公司aso优化方案
  • 深圳罗湖网站制作成人电脑基础培训班
  • 无锡网站制作咨询深圳网站设计十年乐云seo
  • 大连城市建设网站seo优化顾问服务阿亮
  • 福州 网站建设沈阳seo关键词排名优化软件
  • 做网站还要买服务器吗镇江seo
  • 专门做特价的网站优化排名案例