• 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的占位符。

  • 相关阅读:
    在使用EF开发时候,遇到 using 语句中使用的类型必须可隐式转换为“System.IDisposable“ 这个问题。
    The OAuth 2.0 Authorization Framework-摘自https://tools.ietf.org/html/rfc6749
    Principles of good RESTful API Design 好的 RESTful API 设计
    JQuery发送Put、Delete请求
    一起学习 微服务(MicroServices)-笔记
    [WinForm] 使用 WebBrowser 操作 HTML 頁面的 Element-摘自网络
    关闭HTML5只能提示(form上新增novalidate)
    MVC5
    理解OAuth 2.0 -摘自网络
    Java三大主流开源工作流引擎技术分析
  • 原文地址:https://www.cnblogs.com/jabnih/p/6512926.html
Copyright © 2020-2023  润新知