java八种原始类型是内存与语义约定,成员变量有默认值而局部变量必须显式初始化;整数按范围选型,浮点数需用误差容忍比较,char和boolean强调语义而非数值,金额运算须用bigdecimal。

Java 的 8 种原始类型不是语法符号,而是内存与语义的约定。它们在声明为类成员(实例变量或静态变量)时自动获得确定默认值,但局部变量必须显式初始化——这是 JVM 规范强制保障的行为,也是日常编译报错最常见的源头之一。
整数类型:按范围选型,别让 int 成为惯性选择
byte、short、int、long 都是有符号补码整数,取值范围固定且与平台无关。
- byte(1 字节):-128 ~ 127;适合密集型场景,如图像像素数组、网络字节流解析;声明 byte b = 128; 直接编译失败
- short(2 字节):-32768 ~ 32767;较少单独使用,但在协议字段或大数组中可节省一半内存
- int(4 字节):最常用,默认用于循环计数、数组索引、普通计数器;默认值为 0
- long(8 字节):时间戳、文件大小、超大计数必须用它;字面量需加 L 后缀(如 1234567890123L),否则超出 int 范围会编译报错
浮点类型:精度是假象,比较要用误差容忍
float 和 double 遵循 IEEE 754 标准,本质是二进制近似表达十进制小数,0.1 + 0.2 ≠ 0.3 是必然结果,不是 Bug。
- float(4 字节):单精度,约 7 位有效数字;字面量必须带 f 或 F,如 3.14f;默认值为 0.0f
- double(8 字节):双精度,约 15 位有效数字;Java 中浮点字面量默认即为 double 类型,3.14 等价于 3.14d;默认值为 0.0d
- 永远避免 a == b 比较浮点数;应写成 Math.abs(a - b)
- 金额、计费、金融运算必须用 BigDecimal,不用 float/double
char 与 boolean:语义优先,拒绝整数化误用
char 和 boolean 表达的是明确语义,不是数值替代品。
- char(2 字节):无符号 Unicode 类型,范围 '\u0000' 到 '\uffff'(即 0 ~ 65535);默认值是 '\u0000'(空字符,不是空格);虽可参与算术(如 'a' + 1 得 'b'),但不应依赖此特性
- boolean:只有 true 和 false 两个值;不能转成 0/1,不能参与任何数学运算;默认值是 false;严禁用 int flag = 1 替代,既浪费空间又模糊意图
默认值规则:只对成员变量生效,局部变量必须手动赋值
这是新手高频踩坑点:局部变量不初始化就使用,编译器直接拒绝;而成员变量由 JVM 自动赋予默认值。
- 所有数值类型(byte/short/int/long/float/double)默认为 0 或 0.0(带对应后缀)
- char 默认为 '\u0000',视觉上不可见,但有实际 ASCII 值 0
- boolean 默认为 false
- 局部变量(方法内声明)没有默认值,未赋值就引用 → 编译错误,例如:int x; System.out.println(x);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











