Java 数据类型完整详解(2026 版)

Java 的数据类型分为两大类:基本数据类型(Primitive Types)引用数据类型(Reference Types)


1. 基本数据类型(8 种)

类型 字节数 取值范围 默认值 说明
byte 1 -128 ~ 127 0 字节型
short 2 -32768 ~ 32767 0 短整型
int 4 -2^31 ~ 2^31-1(约21亿) 0 整型(最常用)
long 8 -2^63 ~ 2^63-1 0L 长整型
float 4 ±1.4E-45 ~ ±3.4028235E38 0.0f 单精度浮点
double 8 ±4.9E-324 ~ ±1.7976931348623157E308 0.0 双精度浮点(默认)
char 2 0 ~ 65535(Unicode) ‘\u0000’ 字符型
boolean - true / false false 布尔型
代码示例:
public class DataTypeDemo {
    public static void main(String[] args) {
        // 整数类型
        byte b = 127;
        short s = 32767;
        int i = 100;
        long l = 10000000000L;     // 必须加 L 或 l
        
        // 浮点类型
        float f = 3.14f;           // 必须加 F 或 f
        double d = 3.141592653589793;
        
        // 字符类型
        char c1 = 'A';
        char c2 = '中';            // 支持 Unicode
        char c3 = '\u0041';        // Unicode 编码
        
        // 布尔类型
        boolean flag = true;
    }
}

2. 引用数据类型

所有使用 new 关键字创建的对象都是引用类型,包括:

  • (Class):如 StringScannerArrayList
  • 接口(Interface)
  • 数组(Array)
  • 枚举(Enum)
  • 注解(Annotation)

核心区别

  • 基本类型:存储实际值,存放在
  • 引用类型:存储对象的地址(引用),对象本体存放在
String str1 = "Hello";           // 字符串常量池
String str2 = new String("Hello");

int[] arr = new int[10];         // 数组是引用类型

3. 自动装箱与拆箱(Autoboxing & Unboxing)

从 Java 5 开始支持:

Integer num1 = 100;     // 自动装箱:int → Integer
int num2 = num1;        // 自动拆箱:Integer → int

// 底层相当于
Integer num1 = Integer.valueOf(100);
int num2 = num1.intValue();

注意Integer 缓存了 -128 ~ 127 的对象,使用 == 比较时在此范围内结果为 true


4. 类型转换

4.1 自动类型转换(隐式转换)

从小范围到大范围:

byte b = 10;
int i = b;           // 自动转换
long l = i;
double d = l;
4.2 强制类型转换(显式转换)
double d = 3.14159;
int i = (int) d;     // 结果为 3(直接截断小数)

long l = 3000000000L;
int n = (int) l;     // 可能造成数据溢出

5. 常见陷阱与最佳实践

1. 整数溢出

int max = Integer.MAX_VALUE;
System.out.println(max + 1);   // -2147483648(溢出)

推荐:使用 longBigInteger

2. 浮点数精度问题

double a = 0.1;
double b = 0.2;
System.out.println(a + b);     // 0.30000000000000004

推荐:金融计算使用 BigDecimal

3. char 类型本质是整数

char c = 'A';
System.out.println(c + 1);     // 输出 66(Unicode 值)

4. 变量命名与默认值

  • 成员变量有默认值
  • 局部变量必须手动初始化

6. 包装类型 vs 基本类型

场景 推荐使用
普通计算、性能敏感 基本类型
集合(List、Map) 包装类型
泛型 包装类型
需要 null 值 包装类型

总结记忆口诀

基本八种记心里byte short int longfloat doublechar boolean
引用类型 new 出来String 是最常用
装箱拆箱自动换精度范围要记清


练习题(建议立即动手):

  1. 写一个方法,判断一个 int 是否是 2 的整数次幂(使用位运算)
  2. 使用 BigDecimal 实现精确的金额加法
  3. 演示 Integer 缓存机制对 == 的影响

需要我继续讲解以下哪个专题?

  • String 详解(常量池、不可变性)
  • 数组与集合
  • BigDecimal 与 BigInteger
  • Java 内存模型与数据类型的关系

随时告诉我!

更多推荐