《Java核心技术 卷I》学习笔记20:对象包装器

1 简介

所有的基本类型都有一个与之对应的类,这些类称为包装器。这些包装器类有:IntegerLongFloatDoubleShortByteCharacterBoolean。包装器类是不可变的,一旦构造了包装器,就不允许更改包装在其中的值。包装器类是final类,不能派生子类。

要定义基本类型数组列表时,尖括号中的类型参数不允许是基本类型,这时就需要使用包装器。例如,整型数组列表定义如下:

ArrayList<Integer> list = new ArrayList<>();

下面以Integer类为例,介绍包装器类的一些重要方法。其他数值类也有类似的方法。

2 包装器方法

valueOf方法使用给定值构造Integer对象,它的签名为:

static Integer valueOf(String s) // 用字符串 s 表示的整数构造对象,整数为十进制
static Integer valueOf(String s, int radix) // 用字符串 s 表示的整数构造对象,由 radix 参数指定进制

intValue方法将Integer对象的值作为int返回,它的签名为:

int intValue()

toString方法将整数转化为字符串,它的签名为:

static String toString(int i) // 将整数 i 的十进制表示作为字符串返回
static String toString(int i, int radix) // 将整数 i 作为字符串返回,由 radix 参数指定进制

parseInt方法将字符串转化为整数,它的签名为:

static int parseInt(String s) // 返回字符串 s 表示的整数,整数为十进制
static int parseInt(String s, int radix) // 返回字符串 s 表示的整数,由 radix 参数指定进制

3 自动装箱与自动拆箱

将一个int类型的值赋给一个Integer对象时,将自动变换成调用valueOf方法,这种变换称为自动装箱。例如,对于语句Integer n = 3;,编译器会自动将它变换成Integer n = Integer.valueOf(3);

相反地,将一个Integer对象赋给一个int变量时,将会自动变换成调用intValue方法,称为自动拆箱。例如,对于语句int n = list.get(i);,编译器会自动将它变换成int n = list.get(i).intValue();

自动装箱和拆箱也适用于算数表达式,编译器将自动插入一条对象拆箱的指令,然后进行算数运算,最后再将结果装箱。例如:

Integer n = 3;
n++;

当包装器类引用为null时,自动拆箱会抛出NullPointerException异常。例如:

Integer n = null;
System.out.println(2 * n); // NullPointerException
System.out.println(n.intValue()); // NullPointerException

如果在一个条件表达式中混合使用IntegerDouble类型,Integer值就会拆箱,提升为double,再装箱为Double。例如:

Integer n = 1;
Double x = 2.0;
System.out.println(n < x ? n : x); // 输出 1.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值