java的8种基本数据类型严格按字节大小和取值范围定义:byte(1字节,-128~127)、short(2字节,-32768~32767)、int(4字节,-2147483648~2147483647)、long(8字节,-9223372036854775808~9223372036854775807)、float(4字节,±3.4×10³⁸)、double(8字节,±1.8×10³⁰⁸)、char(2字节,0~65535)、boolean(无固定字节,仅true/false)。

Java 的 8 种基本数据类型各有严格定义的字节大小和取值范围,不是靠经验估算的。用错类型轻则数值溢出、精度丢失,重则逻辑异常、金融计算出错。关键不在“记住了多少”,而在“什么时候该换类型”和“越界时怎么兜住”。
整数类型:字节与范围必须严丝合缝
整型本质是固定位宽的二进制补码表示,超出范围就回绕——不是报错,而是静默错误。
- byte(1 字节):-128~127。适合网络协议头、图像像素、大数组缓存。比如读取 TCP 包头长度字段,若误用 int 存储,可能浪费 3 倍内存且掩盖越界风险。
- short(2 字节):-32768~32767。实际项目中较少单独使用,但某些硬件传感器原始采样值(如温湿度模数转换输出)天然落在这个区间,直接用 short 可避免无谓转换。
-
int(4 字节):-2147483648~2147483647。日常计数、数组索引、HTTP 状态码等默认首选。注意:两个 int 相加可能溢出,如
Integer.MAX_VALUE + 1结果为-2147483648。 -
long(8 字节):-9223372036854775808~9223372036854775807。时间戳(毫秒)、订单号、数据库自增主键必须用 long。字面量要加
L,否则编译器仍按 int 解析,超限会报错。
浮点类型:别拿 == 比小数,也别用 float/double 算钱
float 和 double 遵循 IEEE 754 标准,多数十进制小数无法精确表示,比如 0.1 + 0.2 != 0.3 是常态。
- float(4 字节):约 ±3.4×10³⁸,有效数字仅 6~7 位。适合图形渲染、科学模拟等对精度容忍度高的场景。
- double(8 字节):约 ±1.8×10³⁰⁸,有效数字约 15 位。是 Java 默认浮点类型,但依然不适用于金融计算。
-
永远不要用 == 比较浮点数。应改用差值判断:
Math.abs(a - b) (float)或 <code>(double)。 - 金额、利率、库存数量等必须用
BigDecimal。它基于十进制运算,可精确控制舍入模式(如 HALF_UP),避免误差累积。
char 和 boolean:表面简单,底层容易踩坑
char 不是“字符对象”,boolean 也不是“1 字节布尔值”——它们的语义和实现细节常被误解。
-
char 是无符号 2 字节整数(0~65535),对应 Unicode 码点。可参与算术运算:
'Z' + 1得到91(即'[')。单引号'a'是 char,双引号"a"是 String,类型完全不同。 -
boolean 没有规定 JVM 内存大小。单个变量由具体实现决定(HotSpot 通常用 1 字节),但
boolean[]一般按 byte 数组模拟(每个元素占 1 字节)。不能把它当 int 或 byte 强转,也不能做算术运算。 - 布尔逻辑运算符
&&和||具有短路特性,而&和|是位运算符,无短路行为——在条件判断中混用会导致意外执行副作用代码。
边界处理实战:防御式编程怎么做
运行时越界不会自动抛异常,得靠主动检查或工具保障。
- 用包装类静态常量获取边界值:
Byte.MAX_VALUE、Integer.MIN_VALUE,比硬编码更安全、可读。 - 接收外部输入(如 HTTP 参数、文件读取)时,先校验再转换。例如解析字符串为 int 前,用
Integer.parseInt()并捕获NumberFormatException;或用Integer.valueOf(str)在异常时返回 null(配合 Optional)。 - 涉及累加、乘法等易溢出操作,优先选用
Math.addExact()、Math.multiplyExact()等方法——它们在溢出时抛ArithmeticException,而非静默回绕。 - 性能敏感场景(如高频交易、实时音视频处理),避免无谓装箱/拆箱。int 比 Integer 更快、更省内存;但需权衡可空性需求与性能代价。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











