引入
首先标题我写了学习Integer作为案例,是因为了解了一个包装类,其他便能深入浅出的学习到了~
1. 什么是包装类:
以前定义变量,经常使用基本数据类型,
对于基本数据类型来说,它就是一个数,加点属性,加点方法,加点构造器,
将基本数据类型对应进行了一个封装,产生了一个新的类,—》包装类。
int,byte…—>基本数据类型
包装类—>引用数据类型
2. 对应关系:
基本数据类型 对应的包装类 继承关系
byte Byte ---》Number---》Object
short Short ---》Number---》Object
int Integer ---》Number---》Object
long Long ---》Number---》Object
float Float ---》Number---》Object
double Double ---》Number---》Object
char Character Object
boolean Boolean Object
3.已经有基本数据类型了,为什么要封装为包装类?
(1)java语言 面向对象的语言,最擅长的操作各种各样的类。
(2)以前学习装数据的—》数组,int[] String[] double[] Student[]
以后学习的装数据的—》集合,有一个特点,只能装引用数据类型的数据
Integer包装类
1.直接使用无需导包
2.类的继承关系:
3.实现接口:
4.这个类被final修饰,那么这个类不能有子类,不能被继承:
5.包装类是对基本数据类型的封装: 对int类型封装产生了Integer
6.属性
//属性:
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
//“物极必反”原理:
System.out.println(Integer.MAX_VALUE+1);
System.out.println(Integer.MIN_VALUE-1);
运行结果:
2147483647
-2147483648
-2147483648
2147483647
7.构造器(发现没有空参构造器)
(1)int类型作为构造器的参数:
Integer i1 = new Integer(12);
(2)String类型作为构造器的参数:
Integer i2 = new Integer("12");
Integer i3 = new Integer("abcdef");
8.包装类特有的机制:自动装箱 自动拆箱
//自动装箱:int--->Integer
Integer i = 12;
System.out.println(i);
//自动拆箱:Integer--->int
Integer i2 = new Integer(12);
int num = i2;
System.out.println(num)
(1)自动装箱 自动拆箱 是从JDK1.5以后新出的特性
(2)自动装箱 自动拆箱 :将基本数据类型和包装类进行快速的类型转换。
验证:
可以自定打断点测试是否走入valueOf方法中:
9.常用方法:
valueOf方法的底层:
代码:
public class Test04 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
//compareTo:只返回三个值:要么是0,-1,1
Integer i1 = new Integer(6);
Integer i2 = new Integer(12);
System.out.println(i1.compareTo(i2));// return (x < y) ? -1 : ((x == y) ? 0 : 1);
//equals:Integer对Object中的equals方法进行了重写,比较的是底层封装的那个value的值。
//Integer对象是通过new关键字创建的对象:
Integer i3 = new Integer(12);
Integer i4 = new Integer(12);
System.out.println(i3 == i4);//false 因为==比较的是两个对象的地址
boolean flag = i3.equals(i4);
System.out.println(flag);
//Integer对象通过自动装箱来完成:
Integer i5 = 130;
Integer i6 = 130;
System.out.println(i5.equals(i6));//true
System.out.println(i5 == i6);
/*
如果自动装箱值在-128~127之间,那么比较的就是具体的数值
否在,比较的就是对象的地址
*/
//intValue() :作用将Integer--->int
Integer i7 = 130;
int i = i7.intValue();
System.out.println(i);
//parseInt(String s) :String--->int:
int i8 = Integer.parseInt("12");
System.out.println(i8);
//toString:Integer--->String
Integer i10 = 130;
System.out.println(i10.toString());
}
}
运行结果:
-1
false
true
true
false
130
12
130