数据类型-包装类

上一篇文章中,我们初步认识了泛型的概念以及用法,本篇文章我们具体来认识一下泛型是如何被使用的。

上篇文章中我们认识到:泛型(Generic Type)是把类型变量化。
它的底层原理是引用的向上转型是自然的。
然而 基本数据类型是无法使用泛型的,因此通过基本类型一一对应一个包装类型来解决。

包装类的基本认识

如果我们用到了一个类Byte,没有给包名的情况下默认在java.lang.Byte下。

下面概括一下基本类型所对应的包装类:

基本类型

包装类

byte

Byte

short

Short

int

Intger

long

Long

char

Character

float

Float

double

Double

boolean

Boolean

由上面表格我们可以总结为除了int和character是全称,
其余基本类型的包装类只需要首字母大写即可。

值得注意的是,当用包装类处理基本类型之后,就是对象(引用)了,要按照对象的方式去使用。

以下知识我们基本了解即可:

将基本类型转换成包装类的过程即装箱(boxing)

int a = 10;

//手动装箱
Integer i1 = new Integer(a);
Integer i2 = new Integer.valueOf(a);
//自动装箱
Integer i3 = a;    //编译器会帮我们完成,直接转换为i3 = Integer.valueOf(a);

将包装类转换成基本类型的过程即拆箱(unboxing)

Integer i = 10;    //隐含使用了自动装箱的过程,因为常量10默认为int类型

int a = i.intValue();    //i是对象,调用对象下的intValue方法
int b = i;    //大部分情况下编译器会自动拆箱,并不需要手动拆箱

如果一个表达式中既有基本类型,也有包装类型,编译器会进行自动拆箱,对齐成基本类型来运算。

Integer i = 10;
int a = 5;
//编译器则会将 i + a 转换成 i.intValue() + a;

以上时一个包装类和一个基本类型的情况,编译器会将包装类自动拆箱成基本数据类型后,再进行计算。那如果是两个包装类型呢???

Integer i1 = 10;
Integer i2 = 20;
//能直接使用==判断i1和i2是否相等吗?
//答案是不能

此时的i1和i2是对象(即引用),编译器不会自动拆。因为这里是判断两个引用是否相等(即两个引用是否指向同一个对象),而不是值的比较。

包装类中对应类型的工具静态方法

以下为官方文档中的介绍(以Integer为例):

Integer (Java Platform SE 8 ) (oracle.com)

小结

1.因为基本类型无法使用泛型,包装类型就是将基本类型转换成对象,即可以使用泛型;

2.只有int和char类型的包装类型需要特殊记忆(全称+首字母大写),其他基本类型只需要将首字母大写即可;

3.通常情况下,编译器会自动进行拆箱装箱的过程;

4.当基本类型和包装类进行运算时,编译器会进行自动拆箱,将包装类拆箱为基本类型后进行运算;

5.当两个包装类运算时,编译器无法进行拆箱,因为是两个引用之间的运算;

6.查阅方法时,建议使用官方提供的文档进行查阅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值