基本数据类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integar |
long | Long |
float | Float |
double | Double |
现提供integer类型的包装类方法使用
其他包装类的使用可以效仿,方法相同
public class TestCYClass {
public static void main(String[] args) {
//基本数据类型转成包装类对象
Integer a = new Integer(4);
Integer b = Integer.valueOf(39);
//包装类对象转成基本数据类型
int c = b.intValue();
double d = b.doubleValue();
//把字符串转成包装类对象
Integer e = new Integer("9999");
Integer f = Integer.parseInt("98898");
//把包装类对象转成字符串
String str = e.toString();
}
}
自动装拆箱机制
可以直接实现Integer a = 8(类似)
Integer i = 100;//自动装箱
//相当于编译器自动为您作以下的语法编译:
Integer i = Integer.valueOf(100);//调用的是valueOf(100),而不是new Integer(100)
Integer i = 100;
int j = i;//自动拆箱
//相当于编译器自动为您作以下的语法编译:
int j = i.intValue();
空指针问题
public class Test1 {
public static void main(String[] args) {
Integer i = null;
int j = i;
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6eXMlyth-1651936306721)(ecb2994b4d868af83d82a0036f320c19.png)]
null表示i没有指向任何对象的实体,但作为对象名称是合法的(不管这个对象名称存是否指向了某个对象的实体)。由于实际上i并没有指向任何对象的实体,所以也就不可能操作intValue()方法,这样上面的写法在运行时就会出现NullPointerException错误。
三//包装类的缓存问题
整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。
缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。
public class Test3 {
public static void main(String[] args) {
Integer in1 = -128;
Integer in2 = -128;
System.out.println(in1 == in2);//true 因为123在缓存范围内
System.out.println(in1.equals(in2));//true
Integer in3 = 1234;
Integer in4 = 1234;
System.out.println(in3 == in4);//false 因为1234不在缓存范围内
System.out.println(in3.equals(in4));//true
}
}
true
false
true
true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tUwH6K3-1651936306723)(1f4bd4feeb0d8d41f28a1cc0e7a72e2e.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ieTXhvQC-1651936306723)(656b3b61c514ae475b470409070e33b6.png)]
1.自动装箱调用的是valueOf()方法,而不是new Integer()方法。
2.自动拆箱调用的xxxValue()方法。
3.包装类在自动装箱时为了提高效率,对于-128~127之间的值会进行缓存处理。超过范围后,对象之间不能再使用==进行数值的比较,而是使用equals方法。