一、包装类(位于java.lang.包中)
1.概念:基本数据类型对应引用类型,称之为基本数据类型的包装类。
2.基本数据类型对应的包装类:
基本数据类型 包装类类名
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
3.数据之间转换
(1) int 和 Integer 之间的转换
int -----> Integer
a. Integer i1 = new Integer(12); // 借助构造方法
b. Integer i2 = Integer.valueOf(12); // 借助Integer类中的静态方法
Integer ----> int
a. int a1 = i1.intValue() ; // 借助Integer类中的成员方法 intValue()
(2) String 和 Integer之间的转换
String ----> Integer
a. Integer i3 = new Integer(“123”); // 借助Integer类中的构造方法
b. Integer i4 = Integer.valueOf(“123”); // 借助Integer类中的静态方法
Integer ----> String
a. String s1 = i4.toString();
b. String s2 = i4+""; //借助字符串的拼接
(3) int 和 String 之间的转换
int —> String
a. int a = 3;
String s3 = a+"";
String ----> int
int a = Integer.parseInt(“123”); // 借助 Integer类中静态方法
注意:将String类型的数据转换为 int/Integer类型的数据,要求要转换的String数据类型必须是纯数字,否则运行报错,错误信息如下:
java.lang.NumberFormatException (数字格式转换异常)
4. 自动装箱、自动拆箱
(1) JDK5.0之后提供自动装箱和自动拆箱的功能,基本数据类型和对应包装类型之间可以相互自动转换
(2) 自动装箱:基本数据类型可以直接赋值给其对应的包装类型。
自动拆箱:包装类型的引用可以直接赋值给其对应的基本数据类型的变量。
(3) 案例: Integer i = 12; // 自动装箱
int a = i ; // 自动拆箱
(4) 自动装箱实现的原理:自动装箱底层调用的时Integer类中 静态的 valueOf方法:
public static Integer valueOf(int i) {
if (i >= -128 && i <= 127)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i); // 如果 传入数据不在-128~127之间,则new Integer类型对象
}
注意:Java中将 -128127常用数据段的内容进行了预先的包装处理,转换数据只要在-128127之间不需要每次创建对象,而是从处理结果中直接获取即可,-128~127处理结果存储在缓冲区中、常量池。
面试题目:
Integer i1 = 12;
Integer i2 = 12;
System.out.println(i1==i2); // true
Integer i3 = 150;
Integer i4 = 150 ;
System.out.println(i3==i4); // false
5.包装类实际开发应用
(1) 可以用于区分有效数据和无效数据:例如 0 和 null , 0.0 和 null.
(2) 场景:开发时,通常将类中属性定义为基本数据类型对应包装类型。–>区分有效数据和无效数据的