Java 常用类|包装类 装箱拆箱、Integer 缓存面试题
一、引入目的让Object可以统一管理所有类型的数据。包装类基本数据类型所对应的对象类型称为基本数据类型的包装类。二、基本数据类型与包装类对应关系所有包装类都在java.lang包下不需要手动导包。包装类全部被final修饰没有子类。表格基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean三、数据类型之间转换以 Integer 为例3.1 int ↔ Integerint 转 Integerint a 12; // 方式1构造方法 Integer i1 new Integer(a); // 方式2静态方法 valueOf() Integer i2 Integer.valueOf(a);Integer 转 int// 成员方法 intValue() int n i2.intValue();3.2 String ↔ IntegerString 转 IntegerString str 222; // 方式1构造方法 Integer i3 new Integer(str); // 方式2静态方法 valueOf() Integer i4 Integer.valueOf(str);Integer 转 String// 方式1toString() String s1 i4.toString(); // 方式2字符串拼接 String s2 i4 ;四、int ↔ String 互相转换int 转 Stringint a2 32; // 字符串拼接方式 String s3 a2 ;String 转 int开发重点String a 18; int age Integer.parseInt(a);⚠️注意 String 转为 Integer/int 时字符串内容必须是纯数字且不能超出 Integer 数值范围。 编译可以通过运行时报异常java.lang.NumberFormatException数值格式转换异常。五、自动装箱与自动拆箱JDK5.0 新增特性基本数据类型和对应包装类可以自动互相转换。装箱基本数据类型 → 包装类型拆箱包装类型 → 基本数据类型// 自动装箱 int → Integer Integer i1 12; // 自动拆箱 Integer → int int a i1;自动装箱底层原理自动装箱底层 JVM 调用Integer.valueOf(int n)完成转换。valueOf核心源码public static Integer valueOf(int i){ if(i -128 i 127){ return IntegerCache.cache[i(-IntegerCache.low)]; } return new Integer(i); }源码解读如果数值在-128 ~ 127区间直接从Integer 缓冲区缓存池返回对象。如果数值不在该区间new Integer(i)新建对象。缓冲区作用Integer 预先把‑128~127范围内的包装对象缓存存放在缓冲区。 目的提高装箱效率提升 JVM 内存利用率。面试题分析输出结果Integer i1 12; Integer i2 12; System.out.println(i1 i2); // true Integer i3 255; Integer i4 255; System.out.println(i3 i4); // false解析 12 属于‑128~127缓存范围i1、i2 指向缓存中同一个对象比较地址为 true。 255 超出缓存范围两次装箱new两个不同对象地址不一样结果 false。六、包装类实际开发应用使用场景实体类属性把基本数据类型替换为对应的包装类型。目的区分有效数据与无效数据。举例基本类型 int 默认值为 0无法区分 “真实数值 0” 和 “没有赋值” Integer 包装类默认值为nullnull 代表未赋值0 代表真实业务数值。

相关新闻

最新新闻

日新闻

周新闻

月新闻