包装类就是基本数据类型所对应的引用数据类型
Object可统一所有数据,包装类的默认值是null
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Character |
下面是文档的介绍:
将基本类型包装起来,使其具备对象的性质
装箱:将基本数据类型转为对应类型的包装类的过程
拆箱:将包装类转为对应类型的基本数据类型的过程
装箱的两种实现方法:
拆箱的实现方法:
public class Demo01 {
public static void main(String[] args) {
//JDK1.5之前手动装箱、拆箱
//装箱
int num = 10;
//使用Integer类创建对象
Integer integer1 = new Integer(num);
Integer integer2 = Integer.valueOf(num);
System.out.println("装箱");
System.out.println(integer1 + "n" + integer2);
//拆箱
Integer integer3 = new Integer(20);
int num2 = integer3.intValue();
System.out.println("拆箱");
System.out.println(num2);
//JDK1.5之后自动装箱、拆箱
int a = 100;
//自动装箱
Integer integer4 = a;
System.out.println("自动装箱");
System.out.println(integer4);
//自动拆箱
int a2 = integer4;
System.out.println("自动拆箱");
System.out.println(a2);
}
}
3.基本类型和字符串之间的转换
1.Number父类中提供了6个共性的方法
2.parseXXX()
3.valueOf()
需要保证类型兼容,否则抛出NumberFormatException异常
public class Demo02 {
public static void main(String[] args) {
//基本类型和字符串之间的转换
//1.基本类型转换为字符串
int n1 = 100;
//1.1 使用+
String s1 = n1 + "";
System.out.println("+号方法:" + s1);
//1.2 使用Integer中的toString()方法
String s2 = Integer.toString(n1);
System.out.println("toString方法:" + s2);
//1.3 重载方法
String s3 = Integer.toString(n1,2); //转为n1的二进制信息
System.out.println("重载方法:" + s3);
System.out.println("------------------------");
//2.字符转为基本类型
String str = "200";
int n2 = Integer.parseInt(str);
System.out.println(n2);
//boolean字符串转为基本类型,"true" ---> true 非"true" ---> false
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);
}
}
4.拓展:整数缓冲区
public class Demo03 {
public static void main(String[] args) {
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);
}
}
原因分析:引用类型变量integer1和integer2存放在栈里,这两个变量指向堆里两个对象,此时integer1==integer2比较的是两个对象的地址,所以为false
public class Demo03 {
public static void main(String[] args) {
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3==integer4);
Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5 == integer6);
}
}
原因分析:Integer integer3 = 100;是自动装箱,编译查看.class文件发现它用的方法是 Integer integer3 = Integer.valueOf(100);查看该方法源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Java预先创建了256个常用的整数包类型对象,范围在-128到127之间,100在此范围内,因此将地址传给integer3和integer4,此时它们存放同一个地址,指向同一个对象,integer3==integer4结果为true
而200不在-128至127的范围内,Java会开辟新的内存空间,此时integer5和integer6存放的是两个不同的地址,指向的是两个不同的对象,因此integer5==integer6结果为false



