Java 基础数据类型与包装类

理解基本类型和包装类的区别是 Java 基础

🎯 面试重点

📖 基本类型

8 种基本类型

/**
 * 8 种基本数据类型
 */
public class BasicTypes {
    // 整数类型
    /*
     * | 类型   | 字节 | 范围                          |
     * |--------|------|------------------------------|
     * | byte   | 1    | -128 ~ 127                   |
     * | short  | 2    | -32768 ~ 32767               |
     * | int    | 4    | -21亿 ~ 21亿                  |
     * | long   | 8    | -9223372036854775808 ~ ...  |
     */
    byte b = 1;
    short s = 1;
    int i = 1;
    long l = 1L;  // 需要加 L
    
    // 浮点类型
    /*
     * | 类型   | 字节 | 精度    |
     * |--------|------|---------|
     * | float  | 4    | 7位     |
     * | double | 8    | 15位    |
     */
    float f = 1.0f;  // 需要加 f
    double d = 1.0;
    
    // 字符类型
    char c = 'a';
    
    // 布尔类型
    boolean flag = true;
}

包装类

/**
 * 包装类
 */
public class WrapperTypes {
    // 对应关系
    /*
     * byte    -> Byte
     * short   -> Short
     * int     -> Integer
     * long    -> Long
     * float   -> Float
     * double  -> Double
     * char    -> Character
     * boolean -> Boolean
     */
    
    // 装箱和拆箱
    Integer num = 10;  // 自动装箱
    int n = num;       // 自动拆箱
    
    // 手动装箱
    Integer a = Integer.valueOf(10);
    // 手动拆箱
    int b = a.intValue();
}

📖 区别

基本类型 vs 包装类

/**
 * 区别
 */
public class Difference {
    // 1. 默认值
    /*
     * 基本类型:有默认值(int=0, boolean=false)
     * 包装类:默认 null
     */
    
    // 2. 存储方式
    /*
     * 基本类型:栈中存储值
     * 包装类:堆中存储对象
     */
    
    // 3. 泛型支持
    /*
     * 基本类型:不能用于泛型
     * 包装类:可以用于泛型
     * List<int> 错误
     * List<Integer> 正确
     */
    
    // 4. 方法调用
    /*
     * 基本类型:不能调用方法
     * 包装类:可以调用方法
     */
    Integer num = 10;
    System.out.println(num.intValue());  // 10
    System.out.println(num.toString());   // "10"
}

缓存机制

/**
 * 包装类的缓存
 */
public class CacheDemo {
    // Integer 缓存 -128 ~ 127
    /*
     * Integer a = 127;
     * Integer b = 127;
     * System.out.println(a == b);  // true(缓存)
     * 
     * Integer c = 128;
     * Integer d = 128;
     * System.out.println(c == d);  // false(不缓存)
     * 
     * valueOf() 使用缓存
     * new Integer() 不使用缓存
     */
    
    // Byte, Short, Integer, Long, Character 有缓存
    // Float, Double 没有缓存
}

📖 面试真题

Q1: 基本类型和包装类的区别?

答:

Q2: Integer 的缓存范围?

答: -128 到 127

Q3: new Integer(10) 和 Integer.valueOf(10) 的区别?

答: valueOf 使用缓存,new Integer 每次创建新对象。


⭐ 重点:理解基本类型和包装类的区别是理解 Java 的基础