Java八大基本数据类型取值范围和默认值由位数、补码(整型)、IEEE 754(浮点)及语言规范决定:byte(-128~127)、short(-32768~32767)、int(-2147483648~2147483647)、long(-9223372036854775808~9223372036854775807)、float(±3.4×10³⁸)、double(±1.7×10³⁰⁸)、char(0~65535)、boolean(true/false);成员变量默认为0、0.0、'\u0000'、false,局部变量无默认值。

Java 八大基本数据类型取值范围和默认值不是随意设定的,而是由位数、编码规则(如补码)和语言规范共同决定的。掌握这些边界和初始化行为,能避免溢出、空指针、精度误判等常见问题。
整数类型:补码决定范围,byte 到 long 一脉相承
byte、short、int、long 都是有符号整数,统一采用二进制补码表示,因此最小值 = −2n−1,最大值 = 2n−1 − 1(n 为总位数):
- byte(8位):−128 ~ 127,常用于网络字节流、像素值或状态标记
- short(16位):−32768 ~ 32767,极少单独使用,多见于兼容旧协议或密集小整数数组
- int(32位):−2147483648 ~ 2147483647,最常用,默认整型;循环变量、ID、计数器首选
-
long(64位):−9223372036854775808 ~ 9223372036854775807,时间戳、大文件大小、分布式ID必须用,赋值需加 L 后缀(如
long ts = System.currentTimeMillis();)
浮点类型:IEEE 754 标准下的近似表达
float 和 double 不是线性分布,而是按符号位、指数位、尾数位组合编码,因此存在精度限制和“最小正数”概念:
-
float(32位):约 ±3.4×10³⁸,最小正规格数 ≈ 1.4×10⁻⁴⁵;声明时必须加 f 或 F(如
float pi = 3.14159F;);适合内存敏感的大数组,但不适用于金融计算 -
double(64位):约 ±1.7×10³⁰⁸,最小正规格数 ≈ 4.9×10⁻³²⁴;默认浮点类型,写
double x = 0.1;即可;注意0.1 + 0.2 == 0.3为 false,这是二进制无法精确表示十进制小数导致的
char 与 boolean:语义优先,不参与数值运算
这两类不遵循补码公式,而是按语言契约定义:
立即学习“Java免费学习笔记(深入)”;
-
char(16位无符号):0 ~ 65535(即
'\u0000'到'\uffff'),直接映射 Unicode;用单引号,如'中'(Unicode 值 20013)、'\n';不可与字符串混用,也不能直接参与算术运算(除非显式转成 int) -
boolean:仅
true/false两个逻辑值;JVM 不规定其内存大小(常见为 1 字节,但不可依赖);不能转成数字,也不能用0/1替代;专用于条件判断和控制流
默认值:成员变量自动初始化,局部变量必须显式赋值
Java 对未显式赋值的成员变量提供确定默认值,这是语言安全机制;但局部变量不享受该待遇:
- 所有整数类型(byte/short/int/long)默认为
0(long默认为0L) - 浮点类型(float/double)默认为
0.0f/0.0d -
char默认为'\u0000'(空字符,不是空格) -
boolean默认为false - 局部变量(方法内声明)没有默认值,不赋值就使用会编译报错


















