Java中常用int或long实现计数器,轻量高效,适用于单线程或外部同步场景;int范围±21亿,long用于大数值;自增/减用++/--或+=,但非线程安全,多线程应选AtomicInteger/AtomicLong。

Java 中用基本数据类型实现计数器,最常用的是 int 或 long 类型变量,配合简单的增减操作即可。它轻量、高效,适合单线程场景或已由外部同步保障的场景。
用 int/long 声明并初始化计数器
直接声明一个基本类型变量,赋初值(通常是 0):
- int count = 0; —— 适用于一般计数,范围在 -2³¹ ~ 2³¹−1(约 ±21 亿)
- long count = 0L; —— 适用于可能超 int 范围的场景,如高频统计、时间戳差值等
通过 ++/-- 或 += 实现计数操作
基本类型本身不可变,但变量可重新赋值。所有操作都是直接修改变量值:
- count++; 或 ++count; —— 自增 1
- count--; —— 自减 1
- count += 5; —— 增加指定数值
- count = Math.max(0, count - 1); —— 带下限保护的减法(避免负数)
注意线程安全问题
基本类型变量操作(如 count++)不是原子的:它包含“读-改-写”三步,在多线程下可能丢失更新。若需并发安全:
立即学习“Java免费学习笔记(深入)”;
- 不推荐用 synchronized 包裹每次操作(影响性能)
- 更合适的做法是改用 AtomicInteger 或 AtomicLong(它们底层基于 volatile + CAS,线程安全且高效)
- 如果确定是单线程环境(如工具类、局部循环计数),用 int 完全没问题,也更简洁
简单示例:统计字符串中某个字符出现次数
这是一个典型、安全使用基本类型计数器的场景:
String text = "hello world";
char target = 'l';
int count = 0;
for (char c : text.toCharArray()) {
if (c == target) {
count++;
}
}
System.out.println("字符 '" + target + "' 出现了 " + count + " 次"); // 输出:3


















