03_包装类
一、包装类
基本数据类型和包装类型的对应关系:

二、类型转换
装箱:把基本类型转换为引用类型;拆箱:引用类型转换为基本类型
public class demo01 {
public static void main(String[] args) {
// 基本类型
int number = 10;
// 类型转换:基本类型转换成引用类型
Integer integer1 = Integer.valueOf(number);
System.out.println(integer1.getClass());
// 类型转换:引用类型转换成基本类型
int i = integer1.intValue();
System.out.println(i);
//JDK1.5之后自动装箱、自动拆箱
int number2 = 30;
Integer integer2 = number2;
int i2 = integer2;
System.out.println(integer2.getClass());
System.out.println(i2);
}
}
parseXXX()静态方法
XXX表示一种类型(八种基本类型),该方法可实现字符串和基本类型的转换。要注意字符串转基本类型时,boolean字符串形式,只有字符串为"true"时,转换的基本类型才为true,否则为false。
public class demo02 {
public static void main(String[] args) {
// 基本类型转字符串
int num = 10;
//1.1 直接+""
String str1 = num + "";
//1.2 使用Integer中的toString()方法
String str2 = Integer.toString(num);
System.out.println(str1.getClass());
System.out.println(str2.getClass());
// 字符串转换基本类型
String str3 = "20";
//使用Integer.parseXXX()
int i1 = Integer.parseInt(str3);
System.out.println(i1);
//boolean字符串形式转成基本类型,"true"--->true, 非"true"--->false
String str4 = "true";
String str5 = "treu";
boolean b1 = Boolean.parseBoolean(str4);
boolean b2 = Boolean.parseBoolean(str5);
System.out.println(b1);
System.out.println(b2);
}
}
三、Integer缓冲区
public class demo03 {
public static void main(String[] args) {
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1 == integer2); //false
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3 == integer4); //true
Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5 == integer6); //false
}
}
"=="对基本类型比较的是值,对引用类型比较的是地址。
integer1和integer2结果为false:引用类型比较的是地址而不是值,很明显integer1和integer2地址不同;
integer3和integer4结果为true:这里对这两个对象赋值采用的是java的自动装箱,调用了Integer.valueOf()方法,100在cache[]的范围内,cache[]是直接存储在堆中的,所以可以直接取值。
integer5和integer6结果为false:虽说和”integer3和integer4“的方法是一样的,但是因为调用的Integer.valueOf()方法,超过了valueOf()方法的范围,所以就是new了一个引用,所以指向的地址就不用。
valueOf()源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
这里low=-128,high=127,存在一个Integer类型的cache[]数组。

浙公网安备 33010602011771号