• Java 包装类笔记


    @(JDK)[包装类]

    Java 包装类笔记

      当需要使用到集合的时候,如果是基础数据类型,需要转换为包装类,再使用,在JDK1.5之前,每次使用的时候,都需要手动转换为包装类(称为装箱),然后在使用的时候再转换为基础数据类型(拆箱),这样子会很麻烦,也多冗余的代码,在JDK1.5后,就出现了自动装箱/拆箱,再也不需要手动来进行转换了。
    :如果尝试对null的包装类进行自动拆箱,会导致抛出空指针异常。

    Boolean

    Boolean作为boolean的包装类,内部有true和false两个静态变量,用于提高性能,减少实例的创建,所以,除非有必要,一般都建议直接使用静态实例或者valueOf。
    如下:

    public static final Boolean TRUE = new Boolean(true);
    
    public static Boolean valueOf(boolean b) {
            return (b ? TRUE : FALSE);
        }
    

    Integer

    Integer作为int的包装类,和Boolean差不多,区别在于内部会维护一个小区间范围的实例缓存,用以减少实例创建,最大的区间为[-128, 127],其中最大值可以通过系统参数java.lang.Integer.IntegerCache.high来控制,但是不能够大于127,默认为127。
    该实例缓存会在使用的时候,一次性创建完毕。

    private static class IntegerCache {
       static final int low = -128;
       static final int high;
       static final Integer cache[];
    }
    

    所以,在使用的时候(采用valueOf),会判断是否在该区间内,如果是,则返回已创建的实例,否则new一个新的对象。所以一般建议使用静态方法valueOf/getInteger等,而不是new Integer()的方式。

    Byte/Short/Long/Character

    Character缓存区间为[0, 128],其他的和Integer同理,也会有缓存,只是内部写死了,固定区间为[-128, 127]之间。

    Float/Double

      Float/Double和上面的有点不一样,没有内部缓存实例,同时,还有一个特别之处,在于有静态方法可以判断是否为无穷大/小以及是不是一个有效的数字,比如:
    无穷大:float infinite = 1.0f / 0.0f;
    不是有效数字:float nan = 0.0f / 0.0f;
    可以分别通过:isInfiniteisNaN来判断

    Void

    仅仅用来作为void的占位符。

  • 相关阅读:
    bzoj4326 NOIP2015 运输计划
    bzoj4293 [PA2015]Siano
    bzoj4238 电压
    bzoj4216 Pig
    bzoj 4237稻草人
    [题解] PowerOJ 1752 运输问题 (最大/小费用最大流)
    [题解] PowerOJ 1748 星际转移问题 (最大流 + 并查集)
    [题解] PowerOJ 1746 航空路线问题 (最大费用最大流)
    [题解] PowerOJ 1754 负载平衡问题 (最小费用最大流)
    [题解] PowerOJ 1753 分配问题 (最大/小费用最大流)
  • 原文地址:https://www.cnblogs.com/jabnih/p/6512926.html
Copyright © 2020-2023  润新知