java有8种基本数据类型,分为整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean),各具固定位宽、取值范围、默认值及适用场景。

Java 的 primitive 类型是所有变量和计算的起点,不理解它们,后续的数组、集合、泛型甚至内存模型都容易踩坑。它们不是“简单类型”,而是有明确定义的位宽、范围、默认值和行为规则的底层构件。
整数类型选哪个?看范围,更要看场景
byte(1字节)、short(2字节)、int(4字节)、long(8字节)本质是同一类数据的不同“容器规格”。实际选择不能只比大小:
- byte 常用于 I/O 流、网络协议或大量小整数缓存(如像素值),省空间也快;直接赋值超过 127 会编译报错
- short 很少单独使用,除非明确对接 C/C++ 结构体或嵌入式约束;声明时无需后缀,但超出 -32768~32767 会溢出
- int 是默认整型:方法参数、循环变量、数组索引、普通计数都用它;字面量如 100 就是 int,不用写 100i
- long 必须加 L 后缀(如 123456789012L),否则超 int 范围的数字会编译失败;适合时间戳(System.currentTimeMillis())、大计数器
浮点数不是“小数”,而是近似表示
float 和 double 都基于 IEEE 754 标准,存储的是二进制近似值,不是十进制精确值。这意味着:
- float(4 字节)精度约 6–7 位有效数字,适合对精度要求不高、内存敏感的场景(如图形坐标、传感器原始读数);声明必须带 f 或 F,如 3.14f
- double(8 字节)精度约 15 位,是 Java 默认浮点类型;金融计算仍不推荐——要用 BigDecimal;0.1 + 0.2 != 0.3 是典型表现
- 比较浮点数别用 ==,应判断差值是否在容忍误差内,例如:Math.abs(a - b)
char 和 boolean:看似简单,细节关键
char 是 16 位无符号整数,对应一个 Unicode 码点(U+0000 到 U+FFFF),不是“字母专用”:
- 可参与算术运算:char c = 'A' + 1; 结果是 'B';'a' - 'A' == 32 成立
- 支持转义和 Unicode 字面量:'\n'、'\u0041'(等于 'A')
- boolean 只有两个字面量:true 和 false;它没有数值含义,if (flag == true) 是冗余写法,直接写 if (flag)
- boolean 在 JVM 中实际存储大小未强制规定(通常 1 字节或更紧凑),但逻辑上只有两个状态,不可与 int 互转
默认值和内存行为:区别于引用类型的核心
primitive 类型在类成员变量中自动初始化为默认值(如 int→0、boolean→false、char→'\u0000'),而局部变量必须显式赋值才能使用,否则编译报错:
- 这个机制源于它们直接存值、不涉及对象创建——没有 null 概念,也没有构造过程
- 方法传参是值传递:传入 int 变量,函数内修改不影响原变量;这和 String 或 ArrayList 的“传引用”行为截然不同
- 包装类(如 Integer、Boolean)是引用类型,提供工具方法和泛型支持;自动装箱/拆箱便利但有空指针和性能隐患,比如 Integer a = null; int b = a; 会抛 NPE
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











