包装类: - 对应的就是8大基本数据类型
存在的意义: 因为8种基本数据类型不够用,所以SUN公司提供对应的8种包装类型
基本数据类型 包装类型
byte - Byte 父类Number
short - Short 父类Number
int - Integer 父类Number
long - Long 父类Number
float - Float 父类Number
double - Double 父类Number
char - Character 父类Object
boolean - Boolean 父类Object
1.创建方式:
a.直接赋值创建
Integer i = 10;
b.构造方法创建
new Integer(int i)
new Integer(String str)
2.装箱和拆箱:
public class Demo1 {
public static void main(String[] args) {
Integer i =new Integer(4);//装箱
Integer i2=Integer.valueOf(5);//拆箱
// 在jdk1.5之后,上述方法已过时
Integer i3=4;//自动装箱
int i4=i3;//自动拆箱
//
System.out.println(i3+1);
// 为什么没有报错呢?
+号两边是基本数据类型的数字,i3是包装类,不属于基本数据类型,这里会进行自动拆解将i3转换成基本数据类型
Integer a=1000;
//这里相当于 Integer a =new Integer(1000);只不过jdk帮我们自动装箱
Integer b=1000;
System.out.println(a==b);
//false 1000超过了常量池的范围 因为==比较的是对象的内存地址,a和b分别创建了两个新的对象即两个引用中保存的对象内存地址不同。
Integer c=127;
Integer d=127;
System.out.println(c==d);
//true java中为了提高程序的执行效率,将-128-127之间的所有的包装对象提前创建好。放到方法区的整形常量池,目的是只要用这个区间的数据不需要再new对象 直接从整数型常量池中取出,即使用相同的内存地址。
}
}
一道面试题:
3.常用API
Integer/int 和 String之间的转换
String -> Integer:
a. Integer.valueOf()
b. new Integer(str)
String -> int:
a. Integer.parseInt()
4.常量池:
a.所有的包装类中只有Integer有常量池
b.常量池有取值范围:
-128 ~ 127
c.只要超过取值范围,全都是在new对象。