跳转到内容

基本数据类型与包装类

来自代码酷

模板:Note

概述[编辑 | 编辑源代码]

Java的数据类型分为基本数据类型(Primitive Types)和引用类型(Reference Types)。其中,基本数据类型是语言内置的简单数据存储格式,而包装类(Wrapper Classes)则是将基本类型封装为对象的工具类,二者通过自动装箱/拆箱机制实现无缝转换。

核心区别[编辑 | 编辑源代码]

基本数据类型 vs 包装类
特性 基本数据类型 包装类
存储方式 栈内存 堆内存
默认值 有(如int为0) null
是否对象 是(继承自Object)
线程安全 不安全 部分安全(如AtomicInteger)

基本数据类型[编辑 | 编辑源代码]

Java有8种基本数据类型:

数值型[编辑 | 编辑源代码]

  • 整型
    • byte(8位,范围:27271
    • short(16位)
    • int(32位,默认整型)
    • long(64位,需加L后缀)
  • 浮点型
    • float(32位,需加F后缀)
    • double(64位,默认浮点型)

非数值型[编辑 | 编辑源代码]

  • char(16位Unicode)
  • boolean(true/false)

pie title 基本数据类型内存占用 "byte" : 1 "short/char" : 2 "int/float" : 4 "long/double" : 8

包装类[编辑 | 编辑源代码]

每个基本类型都有对应的包装类(位于java.lang包):

基本类型与包装类对应表
基本类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

核心功能[编辑 | 编辑源代码]

  • 提供类型转换方法(如Integer.parseInt()
  • 实现对象化操作(如集合存储)
  • 包含常量(如Integer.MAX_VALUE

自动装箱与拆箱[编辑 | 编辑源代码]

自Java 5引入的自动转换机制:

  • 装箱:基本类型 → 包装类对象(隐式调用valueOf()
  • 拆箱:包装类对象 → 基本类型(隐式调用xxxValue()
// 自动装箱示例
Integer obj = 42;  // 编译器实际执行:Integer.valueOf(42)

// 自动拆箱示例
int num = obj;     // 编译器实际执行:obj.intValue()

页面模块:Message box/ambox.css没有内容。

Integer nullObj = null;
int n = nullObj; // 运行时抛出NullPointerException

缓存机制[编辑 | 编辑源代码]

部分包装类会缓存常用值(享元模式):

  • Integer缓存-128~127(可通过-XX:AutoBoxCacheMax调整)
  • Boolean缓存TRUE/FALSE
  • Character缓存0~127
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true(使用缓存对象)

Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false(新建对象)

实际应用案例[编辑 | 编辑源代码]

场景1:集合操作[编辑 | 编辑源代码]

集合类(如ArrayList)只能存储对象:

List<Integer> list = new ArrayList<>();
list.add(1); // 自动装箱
int val = list.get(0); // 自动拆箱

场景2:泛型编程[编辑 | 编辑源代码]

泛型类型参数必须是包装类:

class Box<T> {
    private T value;
    // 只能使用Integer而非int
}

场景3:数值比较[编辑 | 编辑源代码]

Integer x = 500;
Integer y = 500;
System.out.println(x.equals(y)); // true(值比较)
System.out.println(x == y);      // false(对象地址比较)

最佳实践[编辑 | 编辑源代码]

1. 优先使用基本类型(内存高效) 2. 需要对象操作时使用包装类 3. 使用equals()而非==比较包装类 4. 注意自动拆箱时的NPE风险

常见面试题[编辑 | 编辑源代码]

模板:Collapse

模板:Collapse

参见[编辑 | 编辑源代码]