常用类——包装类

10 篇文章 0 订阅
1 篇文章 0 订阅

一、引入

  1. 目的:让 Object统一管理所有类型的数据。
  2. 包装类:基本数据类型对应的 对象类型的类 被称为基本数据类型的包装类。

二、基本 数据类型 对应包装类型

  1. 包装类都是位于 java.lang中,无需导入包,包装类都被final修饰,没有子类。
  2. 对应关系如下:
基本数据类型       包装类类名
byte           	Byte
short           Short
int             Integer 
long            Long
float           Float
double          Double
char            Character
boolean         Boolean

三、数据类型之间的转换(以Integer为例)

  1. int 和 Integer 之间的转换
    (1) int —> Integer [关注]
int a = 12;
a. Integer i1 = new Integer(a);//利用构造方法
   System.out.println(i1);//12:Integer类中覆盖类toString
b. Integer i2 = Integer.valueOf(a);//Integer类中静态方法

(2) Integer -> int

int n = i2.intValue();//Integer类中成员方法
  1. String 和 Integer之间的转换
    (1) String -> Integer
a.Integer i3 = new Integer("123");//利用构造方法
b.Integer i4 =
Integer.valueOf("123");//Integer类静态方法

(2) Integer -> String

a.String s1 = i4.toString();
b.String s2 = i4+""; //利用字符串拼接
  1. int 和 String 之间的转换
    (1) int --> String
int a2 = 32;
String s3 =a2+"";//利用字符串的拼接

(2) String --> int

String a = 18;
int age = Integer.parseInt(a);//Integer类中静态方法

注意:String转换为 Integer/int时,要求 String中数据必须是纯数值类型,并且不能超过 Integer类型的数据范围,否则编译通过,但是运行报错,错误信息如下:
java.lang.NumberFormatException(数值格式转换异常)

四、自动的装箱 和 拆箱

  1. JDK5.0版本提供了自动装箱 和 拆箱功能,即:基本数据类型和对应的包装类型之间可以相互转换。
  2. 装箱和拆箱
    (1) 装箱:将基本数据类型转换为 对应的包装类型
Integer  i1 = 12;// int ----> Integer

(2) 拆箱:包装类型 转换为 对应的基本数据类型

Integer i1 = 12;
int a = i1; // Integer ---> int
  1. 自动装箱的原理分析
    (1) 自动装箱 时,jvm默认调用 Integer类中的静态方法valueOf(int n),实现对应 int --> Integer之间的转换
    (2) valueOf方法实现的细节:
public static Integer valueOf(int i) {	
	if (i >= -128 && i <= 127){
  	// 如果 i 在 -128~127之间 ,返回 一个结果?????
	return IntegerCache.cache[i + (-IntegerCache.low)];
 	}
  	// 如果 i 不在 -128~127之间
 	return new Integer(i);
}
/*
 valueOf方法实现的解释:如果传递的要转换的value数据不在  -128~127之间,则通过 new Integer(value);方式完成转换;但是如果 value 在 -128~127之间的数据,获取的结果来源如下:
 
*/
private static class IntegerCache {
	static final int low = -128;
	static final int high;
	static final Integer cache[];
  	static {  
   		int h = 127;
    		high = h;
    		cache = new Integer[(high - low) +1];
    		int j = low;
    		for(int k = 0; k < cache.length;k++){
      			cache[k] = new Integer(j++);
   		}
 	}
}

在这里插入图片描述
(3) 缓冲区的作用:Integer对常用数据段 -128~127进行了预先包装处理,包装的结果存储在 常量池(也称为缓冲区),为了提高 包装的效率,从而也提高jvm内存的空间利用率。
(4) 面试题目:分析以下程序打印输出的结果;
在这里插入图片描述

五、包装类的实际开发应用

  1. 应用场景:类中属性由 之前的基本数据类型,替换为 对应包装类型
  2. 应用场景的目的:是为了区分有效数据和无效数据的,例
    如:0和null;
    0.0 和 null 等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值