Java培训之包装类Wrapper

1包装类Wrapper

1.1 为什么需要包装类

Java并不是面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。基本数据类型有它的优势:性能(效率高,节省空间)。

但是我们在实际使用中经常需要将基本数据类型转化成对象,便于操作。比如:

(1)集合的操作,

(2)使用Object类型接收任意类型的数据等,

(3)泛型实参,这时,我们就需要将基本数据类型数据转化为对象。

1.2 包装类

包装类均位于java.lang包,包装类和基本数据类型的对应关系,如图10-1:

Java培训

其中有六个都是继承自java.lang.Number类:

java培训

1.3自动装箱(auto_boxing)与自动拆箱(unboxing)

JDK1.5之前需要手动装箱与拆箱,JDK1.5之后支持自动装箱与自动拆箱。

1. 自动装箱

基本数据类型就自动的封装到与它相同类型的包装中,如:

Integer i = 100;

本质上是,编译器编译时为我们添加了:

Integer i = new Integer(100);

2. 自动拆箱

包装类对象自动转换成基本类型数据。如:

int a = new Integer(100);

本质上,编译器编译时为我们添加了:

int a = new Integer(100).intValue();

1.4 包装类的作用

1. 数据类型的范围

MIN_VALUE、MAX_VALUE

Float和Double中还有正无穷大POSITIVE_INFINITY、负无穷大NEGATIVE_INFINITY,还NaN,是Not a Number的缩写。NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。

程序员可以利用这种定制的 NaN 值中的特定位模式来表达某些诊断信息。

2. 数据类型的转换

1、字符串转成包装类对象

(1)使用包装类型的构造方法

除了Character类型,其他7中类型都有1个构造方法,其参数是字符串类型

例如:

Integer t2=new Integer(“500”);//参数是字符串,字符串的值是必须对应的数值

Integer t3=new Integer(“abc”);// java.lang.NumberFormatException: For input string: “abc”

(2)使用包装类的valueOf方法

例如:Integer i=Integer.valueOf(“500”);

2、字符串转成基本数据类型

通过包装类的parseXxx(String s)静态方法

例如:int i=Integer.parseInt(“500”);

3. 包装类的其他方法

1、Integer类型

public static String toBinaryString(int i)  //把十进制转成二进制

public static String toHexString(int i)     //把十进制转成十六进制

public static String toOctalString(int i)   //把十进制转成八进制

2、Character类型

public static char toUpperCase(char ch)  //转成大写字母

public static char toLowerCase(char ch)  //转成小写字母

其他的查看相关API文档即可

3、equals

按照包装的基本数据类型的值比较

4、compareTo

按照包装的基本数据类型的值比较

1.5 缓存问题

我们在编程时大量需要值在-128到127范围之间的Integer对象。如果只能通过new来创建,需要在堆中开辟大量值一样的Integer对象。这是相当不划算的,IntegerCache.cache很好的起到了缓存的作用。

缓存

byte Byte -128–127

short Short -128–127

int Integer -128—127

long Long -128—127

float Float 不缓存

double Double 不缓存

char Character 0–127

boolean Boolean TURE,FALSE


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)