Java八大基本数据类型取值范围由位数和编码规则决定:整数用补码(如byte:-128~127),浮点用IEEE 754(float约±3.4×10³⁸、double约±1.7×10³⁰⁸),char为0~65535,boolean仅true/false;默认值仅适用于成员变量,分别为0、0.0、'\u0000'、false。

Java八大基本数据类型取值范围和默认值不是靠死记硬背,而是由位数和编码规则决定的。掌握底层逻辑,写代码时才能避开溢出、精度丢失、隐式转换等常见坑。
整数类型:补码决定上下限
byte、short、int、long 都是有符号整数,统一用二进制补码表示,取值公式固定:
- 最小值 = −2n−1(n 是总位数)
- 最大值 = 2n−1 − 1
例如:
• byte 占 8 位 → −2⁷ = −128,2⁷ − 1 = 127
• int 占 32 位 → −2³¹ = −2147483648,2³¹ − 1 = 2147483647
• long 占 64 位 → 下限 −9223372036854775808,上限 9223372036854775807
声明时注意字面量后缀:
• long 必须加 L 或 l(如 long id = 123456789012345L;)
• 超出 int 范围的整数字面量直接赋给 int 变量会编译报错
立即学习“Java免费学习笔记(深入)”;
浮点类型:IEEE 754 标准下的非线性分布
float 和 double 不是“均匀分段”,而是按 IEEE 754 规则由符号位、指数位、尾数位共同决定可表示的数值区间:
- float(32 位):约 ±3.4×10³⁸,有效数字约 6–7 位
- double(64 位):约 ±1.7×10³⁰⁸,有效数字约 15–16 位
关键细节:
• 字面量默认是 double,写 float 必须加 F 或 f(如 float f = 3.14F;)
• Float.MIN_VALUE 是最小正正规数(≈1.4×10⁻⁴⁵),不是负数下限;真正下限是 -Float.MAX_VALUE
• 浮点运算存在精度误差(如 0.1 + 0.2 == 0.3 返回 false),金额计算必须用 BigDecimal
char 与 boolean:特殊但明确
char 是无符号 16 位整数,底层不走补码,范围就是 0 到 2¹⁶−1(即 0 ~ 65535),直接对应 Unicode 码点。可赋值为字符字面量('中')、Unicode 转义('\u4f60')或整数(char c = 65; → 'A')。
boolean 没有数值范围概念,只有 true 和 false 两个逻辑值。JVM 不规定其内存大小(常见实现为 1 字节),也不允许与 int 互转。成员变量默认值为 false,局部变量不自动初始化,必须显式赋值。
默认值只对成员变量生效
Java 规定所有基本类型字段(类中定义的变量)都有默认值,但这个规则不适用于方法内的局部变量:
- int / short / byte / long → 0(或 0L)
- float / double → 0.0f / 0.0d
- char → '\u0000'(空字符,ASCII 0)
- boolean → false
局部变量未初始化就使用会编译报错,比如在方法里写 int x; System.out.println(x); 直接通不过编译——这是 Java 的安全机制,不是疏漏。


















