目录
一、基本数据类型概述
八大类型速查表
二、各类型详解与常见陷阱
1. 整型家族(byte/short/int/long)
2. 浮点型(float/double)
3. 字符型(char)
4. 布尔型(boolean)
三、类型转换的明坑暗礁
1. 隐式转换规则(由低到高)
2. 显式强制转换风险
3. 运算时的类型提升
四、高频面试陷阱题解析
1.无限循环之谜
2.浮点精度丢失案发现场
3.自动装箱NPE隐患
五、最佳实践建议
一、基本数据类型概述
Java作为强类型语言,提供了八种基本数据类型(Primitive Types),构成了Java程序的基石。与引用类型不同,基本类型直接存储数据值,具有固定内存空间和默认值,在内存分配和访问效率方面具有优势。
八大类型速查表
数据类型 | 位数 | 默认值 | 取值范围 | 包装类 |
---|---|---|---|---|
byte | 8 | 0 | -128~127 | Byte |
short | 16 | 0 | -32768~32767 | Short |
int | 32 | 0 | -2³¹~(2³¹-1) | Integer |
long | 64 | 0L | -2⁶³~(2⁶³-1) | Long |
float | 32 | 0.0f | ±1.4E-45~±3.4E38 | Float |
double | 64 | 0.0d | ±4.9E-324~±1.7E308 | Double |
char | 16 | '\u0000' | 0~65535 | Character |
boolean | 1 | false | true/false | Boolean |
二、各类型详解与常见陷阱
1. 整型家族(byte/short/int/long)
典型用法:
byte fileSize = 120; // 文件字节处理
short screenWidth = 1920; // 屏幕分辨率
int population = 1400000000;// 常用整型
long universeAge = 13800000000L; // 必须加L后缀
避坑指南:
-
long类型赋值必须加L:
long num = 12345678900;
会编译错误 -
整数溢出陷阱:
int max = Integer.MAX_VALUE;
System.out.println(max + 1); // 输出-2147483648(最小值)
-
byte/short运算自动提升:
byte a = 100;
byte b = 50;
byte c = (byte)(a + b); // 必须显式强制转换
2. 浮点型(float/double)
内存优化示例:
float price = 9.99f; // 7位有效数字
double pi = 3.1415926535; // 15位有效数字
精度陷阱:
-
舍入误差问题:
System.out.println(0.1 + 0.2); // 输出0.30000000000000004
-
比较的正确方式:
// 错误方式
if (a == b) {...}
// 正确方式
if (Math.abs(a - b) < 1e-6) {...}
3. 字符型(char)
特殊用法:
char copyright = '\u00A9'; // Unicode表示
int ascii = 'A'; // 自动转换为65
常见误区:
-
char与String混淆:
'A'
vs"A"
-
数值运算提升:
char c = 'A';
System.out.println(c + 1); // 输出66(int类型)
4. 布尔型(boolean)
严格类型限制:
boolean isActive = true;
// if(1) {...} // 编译错误(区别于C语言)
三、类型转换的明坑暗礁
1. 隐式转换规则(由低到高)
byte → short → int → long → float → double
int a = 100;
double b = a; // 自动转换
2. 显式强制转换风险
double d = 123.456;
int i = (int)d; // 截断小数(i=123)
int overflow = (int)8888888888L; // 数据溢出
3. 运算时的类型提升
byte a = 100;
byte b = 50;
int result = a * b; // 自动提升为int计算
四、高频面试陷阱题解析
1.无限循环之谜
for(byte i=0; i<128; i++){
System.out.println(i); // 死循环(i达到127后变-128)
}
2.浮点精度丢失案发现场
System.out.println(9999999999999999.0 - 9999999999999998.0);
// 输出2.0(精度不足)
3.自动装箱NPE隐患
Integer num = null;
int value = num; // 运行时报NullPointerException
五、最佳实践建议
金融计算使用
BigDecimal
循环计数器优先使用
int
大整数考虑
long
或BigInteger
类型转换时显式声明范围检查
警惕包装类的自动拆箱NPE