你好,游客 登录 注册 搜索
背景:
阅读新闻

Java 包装类笔记

[日期:2017-06-26] 来源:Linux社区  作者:jabnih [字体: ]

@(JDK)[包装类]

Java 包装类笔记

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

Boolean

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

public static final Boolean TRUE = new Boolean(true);

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

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-06/145198.htm

linux
相关资讯       Java 包装类 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款