包装类
没事翻博客的时候,发现了一个新名词:包装类。这个词以前好像没听说过,类还需要包装吗?只听说过封装数据,封装方法来的,从来不曾听说包装类。就去瞅了瞅。
什么是包装类?
顾名思义,就是将基本的数据类型和一些辅助方法包装到类中。例如,将int包装到Integer中:
这里就是包装的一些辅助方法。
为什么会出现包装类?包装类用来解决什么问题的?
包装类主要是为了解决基本数据类型不能直接调用方法而创造的,因为基本数据类型就只是数据类型。引用数据类型就可以调用Object的方法,因为它属于对象。为了便于通过基本数据类型调用Object的方法,所以包装类出现了。
两种类型的包装类
包装类有两种:一种是数值型包装类,这种包装类是继承了Number类的;另一种是对象型包装类,这种包装类不继承其他类(即:直接继承自Object类)。
数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double 到这为止,前面都是数值型包装类 |
boolean | Boolean 剩下两个都是对象型包装类 |
char | Character |
数值型包装类
数值型包装类主要针对于八大基本数据类型的六大:byte,int,short,long,float,double。他们的包装类分别对应于Byte,Integer,Short,Long,Float,Double。
足见,数据型包装类都继承了Number类,同时实现了Comparable的方法。
Number
这里讲一下Number:
- 它实现了java.io.Serializable接口。具有以下方法:
- 通过了解,Number用于拆箱和装箱。装箱就是将基本数据类型封装成包装类对象;拆箱就是将包装类对象拆封成基本数据类型。
//装箱
Integer int1 = new Intger(2);
//拆箱
int int2 = Integer.intValue();
- JDK1.5后提供自动拆装箱。
//自动装箱
Integer int1 = 1;
//自动拆箱
int int2 = int1;
需要注意,自动装箱还需要考虑到内存复用问题。0127的内存都是在高速缓存区(即cache)去取,可以复用;128-之后的区间就需要新创建对象了。因此,在0127数值区间的对象可以使用==进行判断,而在此数值区间之外的对象就需要使用equals进行判断了。为了避免麻烦,建议统一使用equals。
所有POJO(简单Java类,只包含有参构造,基本属性,get/set)类属性必须使用包装类数据类型,类属性即static属性。RPC(远程方法调用)方法返回值和参数必须使用包装数据类型!
对象型包装类
对象型包装类:Character,Boolean。
拓展
编码那些你不知道的事儿~
有时候会遇到有关编码的问题,就很好奇,ASCll编码,非ASCll编码,Unicode编码,utf-8编码之间到底有什么区别呢?今天抽空去看了看,这里对今天的学习做个总结吧:
ASCll编码是英文和二进制之间的编码,ASCll编码规定了128个字符的编码。
非ASCll编码是其他国家各国将自己的语言和二进制对应起来的编码。
由于非ASCll编码给国与国之间的交流造成困难,于是出现了Unicode编码。Unicode编码纳入了世界上所有的符号,它可以容纳100多万个符号。
由于Unicode编码没有规定符号的存储方式,而且不同符号存储的字节也不一样,容易造成空间浪费,也无法区分编码方式是ASCll还是Unicode,因此,出现了Unicode的不同实现方式:utf-8、utf-16(2个字节)、utf-32(4个字节)。
点此详细了解Java编码方式
Pass:本文参考自https://blog.csdn.net/weixin_40739833/article/details/80093527,详情请见此链接。