首先我们应该知道包装类是对基本数据类型的包装,共四类八种。那么为什么要用包装类呢,基本数据类型和包装类有什么区别和联系?
java语言是一种面向对象的语言,而基本数据类型无法创建对象,为了丰富基本数据类型的操作,提供了8个包装类型。它们的作用是一样的。
基本类型 | 包装类型 | 基本类型默认值 | 包装类型默认值 |
byte | Byte | null | 0 |
short | Short | null | 0 |
int | Integer | null | 0 |
long | Long | null | 0 |
char | Character | null | null |
float | Float | null | 0.0f |
double | Double | null | 0.0 |
boolean | Boolean | null | false |
下面以Integer为例对包装类做一些了解。
1.有参构造:
Integer(int value)
Integer(String s) ----> String 转 Integer
创建对象:
方法一:
private static void demo1() {
//创建Integer对象,将基本类型转换成包装类的对象,值不可变(private final int value 底层是final修饰)
Integer num = new Integer(100);
Integer num1 = new Integer("100");
System.out.println(num); //100
System.out.println(num1); //100
System.out.println(num=num1); //false
}
方法二:
private static void demo2() {
//自动装箱:基本数据类型的数据自动转换成包装类的对象 底层实现:包装类.valueOf()
Integer num1 = 100;
Integer num2 = 100;
Integer num3 = new Integer(100);
System.out.println(num1);
System.out.println(num2);
System.out.println(num1==num2);//true
System.out.println(num1==num3);//false
Integer num4 = 200;
Integer num5 = 200;
System.out.println(num4==num5);//false
}
为什么100与100相比是true,而200与200比是false?
整数缓存池:底层是数组,大小为256,值范围 -128 — 127,所以100是相等的。
2.比较大小
//包装类数据不能使用==比较 用equals
System.out.println(num4.equals(200));
//提供了排序和比较规则 0 相等 -1 1
System.out.println(num4.compareTo(num5));
3.自动拆箱
private static void demo3() {
Integer num = new Integer(100);
int a = num; //自动拆箱,将包装类对象自动转换成基本数据类型
int b = num.intValue();//底层实现 包装类对象.***Value
System.out.println(a);//100
System.out.println(b);//100
}