java的8个基本数据类型是byte、short、int、long、float、double、char、boolean;它们是语言级关键字,不可继承、不为null、有默认值,与string、包装类、void等严格区分。

Java里到底哪8个是基本数据类型?
Java只有8个基本数据类型,一个不多、一个不少:byte、short、int、long、float、double、char、boolean。别把 String 算进去——它是引用类型,底层是 char[] 加一堆方法,和基本类型有本质区别。
-
String是类,不是关键字;而上面8个全是语言级关键字,不能被继承、不能为 null(变量有默认值) - 有人误以为
void是基本类型——它只是方法返回标识,不表示值,连类型都不是 - 所有包装类(如
Integer、Boolean)都是引用类型,和对应基本类型严格区分
什么时候该用 byte 或 short,而不是 int?
绝大多数场景下,直接用 int 就行。JVM 对 int 有原生优化,反而是 byte 和 short 在运算时会自动提升为 int,多此一举。
- 真正需要
byte:处理二进制流(如网络包、文件头)、内存敏感场景(比如百万级byte[]缓存) - 真正需要
short:极少数硬件协议要求 16 位整数,或与 C/C++ JNI 交互时对齐结构体字段 - 常见坑:
byte b = 128;编译报错——因为byte最大值是 127;必须写成byte b = (byte)128;,但这时值已溢出变成 -128
float 和 double 别乱用,尤其别碰钱
float 和 double 都遵循 IEEE 754 标准,天生无法精确表示十进制小数(比如 0.1)。它们只适合科学计算、图形渲染等允许误差的场景。
-
double是浮点数默认类型:3.14是double,写3.14f才是float - 货币、计费、金融计算必须用
BigDecimal或整数单位(如“分”存为long) - 性能陷阱:
float虽省内存,但在现代 JVM 上,double运算往往比float更快(CPU 寄存器天然按 64 位对齐)
char 能存汉字,但 boolean 不占 1 bit
char 是无符号 16 位 Unicode(\u0000 到 \uffff),所以能完整覆盖常用汉字(包括 emoji 中的部分字符);但 boolean 的存储大小 JVM 规范没强制规定——实际在 HotSpot 中,单独的 boolean 变量通常占 1 字节(不是 1 bit),数组则可能位压缩或字节对齐。
立即学习“Java免费学习笔记(深入)”;
-
char c = '中';合法;char c = "中";报错——单引号是字符,双引号是字符串 -
boolean没有字面量运算:true + false不合法,也不能转成int;想映射数值请显式写b ? 1 : 0 - 别依赖
boolean的内存大小做优化——不同 JVM 实现差异大,且 JIT 会重排、合并、消除,意义不大
最容易被忽略的一点:基本类型没有“空值”概念。哪怕你声明 int x; 在类字段里,它也有默认值 0;但一旦放在局部变量里,不初始化就用,编译器直接拦住——这个边界很多人在 if 分支里漏赋值时才突然发现。










