Java有8种基本数据类型,均为非对象的原始值类型;整型按范围选byte/short/int/long,int最常用;float/double存在精度陷阱,金融场景用BigDecimal;char和boolean有特殊默认值与比较逻辑;Java无内置无符号类型,但提供工具方法支持无符号运算。

整型怎么选:byte/short/int/long 的实际取舍逻辑
这四种都是有符号整数,区别只在位宽和取值范围,选错会导致溢出或浪费内存:
-
byte(1字节):适合小范围计数,比如状态码、RGB颜色分量;别用它存年龄——虽然够用,但算术运算会自动提升为int,反而增加隐式转换成本 -
short(2字节):比byte少见,除非处理大量传感器采样值且内存敏感(如嵌入式或高频交易中间件) -
int(4字节):**默认整型,99%场景该用它**;JVM对int有最优化支持,循环计数、数组索引、HTTP状态码都用它 -
long(8字节):时间戳(System.currentTimeMillis())、数据库主键(如 Snowflake ID)、大额金额(注意:钱仍建议用BigDecimal);写常量必须加L后缀,否则编译报错,例如:long id = 1234567890123L;
浮点型陷阱:float 和 double 到底谁更“准”?
float 和 double 都是 IEEE 754 浮点数,本质无法精确表示大多数十进制小数(比如 0.1 + 0.2 != 0.3):
-
float(4字节):精度约6–7位有效数字,适合图形渲染、机器学习推理等对吞吐敏感、精度要求不高的场景;写浮点字面量必须加f或F,否则 Java 当作double处理,赋值给float变量会编译失败 -
double(8字节):精度约15位,是 Java 默认浮点类型;3.14、-0.001这类字面量无需后缀,但涉及金融、科学计算时,仍应避免直接用它做等值判断或累计求和
char 和 boolean:看似简单,但初始化和比较容易翻车
char 是无符号16位 Unicode 字符,boolean 只有两个值,但它们的行为常被误解:
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
-
char默认值是'\u0000'(空字符),不是null;不能用== null判断是否为空,而要用c == '\u0000'或Character.isISOControl(c) -
boolean默认值是false,但包装类Boolean默认是null;千万别把Boolean对象直接用于if条件——可能触发NullPointerException -
char支持算术运算(比如'a' + 1得'b'),但这是基于 Unicode 码点的整数运算,不是字符串拼接
为什么没有“无符号整型”?又该怎么绕过限制
Java 所有整型(byte/short/int/long)都是有符号的,没有 unsigned int 这种东西。这不是疏忽,是设计取舍——简化 JVM 指令集与跨平台一致性。
立即学习“Java免费学习笔记(深入)”;
- 如果真需要无符号语义(比如解析网络协议、读取二进制文件中的 uint32),Java 8+ 提供了工具方法:
Integer.toUnsignedString(i)、Long.compareUnsigned(a, b)、Integer.parseUnsignedInt(s) - 注意:这些方法只是把负数按位解释为“无符号值”,底层存储仍是原类型;
int x = -1; System.out.println(Integer.toUnsignedString(x)); // 输出 "4294967295" - 别自己用位运算硬凑,容易出错;优先用标准库,可读性和兼容性更有保障
int,就是内存里实实在在的32个比特。这种确定性带来效率,也意味着你得亲手管好边界、精度和符号。









