目录
一:基本数据类型的包装类
二:包装类的作用
●把基本数据类型转化为对象(这是最根本的作用),或者把包装类的对象转化为基本数据类型
包装类可以使包装类对象,基本数据类型,字符串这三者之间进行转化
三:自动装箱和拆箱
自动装箱和拆箱使编译器帮你干的
错误示范:
就是引用所指向的对象的空间是空的,不能使用该引用调用空的对象的方法
四:包装类的缓存问题
当在包装类中的数字是-128-127的时候,每个包装类的引用指向的对象都是同一个
五:自定义一个包装类
看下面代码
●我们需要一个缓存数组用来存放-128---127的数字,这个数组只需要一分,所以用static修饰
●用final定义两个常量
●对数组进行静态初始化
●实现valueOf方法
package com.changYongLei;
public class MyInteger {
private int value;
private static MyInteger[] cash;
public static final int LOW=-128;
public static final int HIGH=127;
static{//静态初始化块
for(int i=LOW;i<=HIGH;i++){
cash[i+128]=MyInteger.valueOf(i);//下标从零开始
}//下面实现valueOf函数
}
public static MyInteger valueOf(int i){
if(i>=LOW&&i<=HIGH){
return cash[i+128];
}else{
return new MyInteger(i);//带参构造器在下面实现
}
}
private MyInteger(int i){
this.value=i;
}
}
上面这个代码是错误的
1:产生了空指针,一般产生空指针的原因是你调用的那个对象的属性或者方法是空的,而这个是因为你压根就没有产生对象,所以要产生一个对象
2:在创建数组的时候没有给数组分配空间
六:修改后的自定义包装类
package com.changYongLei;
public class MyInteger {
private int value;
private static MyInteger[] cash=new MyInteger[256];
public static final int LOW=-128;
public static final int HIGH=127;
static{//静态初始化块
for(int i=LOW;i<=HIGH;i++){
cash[i+128]=new MyInteger(i);//下标从零开始
}//下面实现valueOf函数
}
public static MyInteger valueOf(int i){
if(i>=LOW&&i<=HIGH){
return cash[i+128];
}else{
return new MyInteger(i);//带参构造器在下面实现
}
}
private MyInteger(int i){
this.value=i;
}
@Override
public String toString() {
return "MyInteger{" +
"value=" + this.value +
'}';
}
public static void main(String[] args) {
MyInteger i=new MyInteger(22);
MyInteger ii=new MyInteger(2222);
System.out.println(i);
System.out.println(ii);
}
}