java八种包装类_java八种包装类

概述

java中有八种基本类型分别对应八种包装类型,但是包装类里实际存储的值还是使用的基本类型。

例如Interge使用成员变量value记录值 private final int value;

特点

包装类统一继承抽象类Number,并且实现了Comparable接口

包装类都是final,而且成员变量都是static final

构造方式

通过直接赋值 Integer i=1;

构造器 Integer i=new Integer(1);

静态工厂valueOf方法 Integer i=Integer.valueOf(1);

自动拆装箱

JVM自动进行的转换,在编译阶段执行,保证不同的写法在运行时是等价的。

Integer i=1;执行装箱操作,先调用valueOf方法生成对象,然后将变量i执行它

int j=i++;执行拆箱操作,先调用intValue方法拿到值,然后将其+1操作

缓存

除了Float和Double,其余六种包装类自身都包含有内部缓存,使用内部缓存类cache,来初始化缓存。调用valueOf方法时,会先匹配缓存,如果无法命中,则执行new实例。

缓存范围如下:

Byte 全部被缓存,即[-128,127]

Short和Long [-128,127]

Character [0,127]

Integer [-128,127]

Boolean TRUE/FALSE

值得注意的是,在执行拆装箱操作时,缓存是有效的,代码如下

//自动装箱,缓存有效

Integer i=127;

Integer j=Integer.valueOf(127);

System.out.println(j==i); //true

//自动装箱,没有匹配缓存

Integer a=Integer.valueOf(128);

Integer b=128;

System.out.println(a==b);//false

效率

绝大多数情况区别不大,但尽量避免无意的装拆箱操作。

在性能敏感的场景下,处理大量数据的开销,比如几十万个整数,这种时候使用基本类型用来代替包装类是比较合适的,或者使用数组代替List,因为数组类是JVM编译创建的.

hashcode

因为包装类hashCode是基于其自身value值计算的,所以不同方式构造出来的包装类只要其value样,则hashCode也一定相同。

使用场景

原始基本类型不使用与集合或者枚举中,所以有一定的局限性

在javabean里面最好使用Integer来定义,因为Integer值默认为null,这样使用变量值的时候如果不赋值则会出错,可以有效的识别出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值