Java有8个基本类型:byte、short、int、long、float、double、char、boolean;均为值类型,不继承Object,不可为null,不能调用方法。

Java基本类型有哪些?直接列出来别绕弯
Java只有8个基本类型,多一个都不是——byte、short、int、long、float、double、char、boolean。没有string,没有undefined,也没有number这种笼统叫法。
它们全都是值类型,不继承Object,不能调用方法(比如int.toString()会报错),也不能为null。
每个类型的字节数和取值范围怎么记?看规律
整数类型全是二进制补码表示,范围对称但负数多1个;浮点按IEEE 754;char是无符号16位整数,不是“字符对象”;boolean不规定具体字节大小,JVM实现可自行决定(通常1字节或更小,但数组里按1字节对齐)。
-
byte:1字节,-128 ~ 127 -
short:2字节,-32768 ~ 32767 -
int:4字节,-2³¹ ~ 2³¹−1(即 -2147483648 ~ 2147483647) -
long:8字节,-2⁶³ ~ 2⁶³−1(写数字时必须加L后缀,如123L) -
float:4字节,约 ±3.4×10³⁸,精度约6~7位十进制数,字面量要加F或f(如3.14f) -
double:8字节,约 ±1.8×10³⁰⁸,精度约15位,字面量默认就是double(3.14等价于3.14d) -
char:2字节,0 ~ 65535(即'\u0000' ~ '\uffff'),只能用单引号,不能存emoji(超出BMP需用代理对) -
boolean:无固定字节定义,仅能取true或false,不能转成int或参与算术运算
为什么long赋值不加L会编译失败?
Java字面量整数默认是int类型。如果写long x = 2147483648;,这个数已超出int最大值,编译器先按int解析就直接报错,根本不会尝试隐式提升。
立即学习“Java免费学习笔记(深入)”;
正确写法必须显式标记:long x = 2147483648L;。同理,float字面量不加F会被当成double,导致float f = 3.14;编译失败。
常见错误现象:
-
int x = 10000000000;→ 编译错误:“integer number too large” -
float f = 1.0;→ 编译错误:“possible loss of precision” -
char c = -1;→ 编译错误:“incompatible types: possible loss of precision”(char是无符号)
自动装箱/拆箱时容易踩哪些坑?
基本类型和对应包装类(如Integer)混用时,看似无缝,实则藏坑。关键在于:缓存机制、null解包、==比较陷阱。
使用场景:集合容器(ArrayList<integer></integer>)、泛型、方法参数自动转换。
-
Integer a = 127, b = 127; a == b是true;但a = 128; b = 128;后a == b是false(因为Integer.valueOf()只缓存-128~127) -
Integer x = null; int y = x;运行时报NullPointerException(拆箱时解null) -
Boolean flag = true; if (flag == true)可以,但if (flag)更安全,避免null风险 - 性能影响:频繁装箱(如循环里
list.add(i))会生成大量临时对象,Android上尤其敏感
最常被忽略的一点:基本类型数组(int[])和包装类数组(Integer[])完全不兼容,Arrays.asList(new int[]{1,2})返回的是含单个元素的List<int></int>,不是你想要的。










