包装类用途
Java中有些异类(8种基本数据类型)它们不能像对象一样进行属性和方法的调用以及进行相互之间的对象化处理,包装类的存在就是为了解决这些异类产生的问题,让它们能像对象一样进行交互。
包装类与基本数据类型之间的关系
包装类的常用方法
Java中所有包装类都是存放在java.lang这个包中。
以Integer为例,介绍它常用的属性和方法
public final class Integer(){
}
所有的包装类都是用final修饰,不允许被继承,无子类。
基本数据类型和包装类的转换
- 装箱 : 基本数据类型转换为包装类
- 拆箱:包装类转换为基本数据类型
自动装箱(拆箱):
int a = 1;
Integer b = a;
手动装箱(拆箱):
int a = 1;
Integer b = new Integer(a);
//拆箱
int c = b.intValue();
基本数据类型和字符串之间转换
通过包装类完成基本数据类型和字符串之间转换。
public class Demo {
public static void main(String[] args){
int a = 3;
String name = Integer.toString(a);
System.out.println(name);
//1.
int b = Integer.parseInt(name);
//2.包装类的valueOf方法先将字符串转为包装类,再通过自动拆箱完成基本数据类型的转换
int d = Integer.valueOf(name);
}
}
补充知识
包装类对象的初始值
首先看下基本数据类型的初始值:
(注:上图中\u是unicode编码)
跟这些基本数据类型对应的包装类,它们的初始值是多少?
包装类的初始值为null。
包装类对象间比较
看代码:
public class WrapperTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer one=new Integer(100);
Integer two=new Integer(100);
System.out.println("one==two的结果:"+(one==two));//1
Integer three=100;//自动装箱
//Integer three=Integer.valueOf(100);
//等号两端比较的是值
System.out.println("three==100的结果:"+(three==100));//2 自动拆箱
//执行这个语句时 编译器实际上执行的是这个:Integer four=Integer.valueOf(100);
Integer four=100;
System.out.println("three==four的结果:"+(three==four));//3
Integer five=200;
System.out.println("five==200的结果:"+(five==200));//4
Integer six=200;
System.out.println("five==six的结果:"+(five==six));//5
Double d1=Double.valueOf(100);
System.out.println("d1==100的结果:"+(d1==100));
Double d2=Double.valueOf(100);
System.out.println("d1==d2的结果:"+(d1==d2));
}
}
上边代码这个部分:Integer.valueOf(100)
,为了执行的效率,在这个方法执行的过程中,java内存提供了一个类似于常量数组的缓存区(对象池),如果传入这个方法的参数是大于-128小于127这个范围,会去缓存区查找是否存在,如果有,直接产生,如果没有,实例化新的产生。这也就解释了为什么three==four打印出的值是ture。而five==six的结果是false。
八种基本数据类型中,除了float和double
,其他的都是应用对象常量池这个概念的。
后续持续更新ing...