闰年判断的正确逻辑表达式是(year % 4 == 0 && year % 100 != 0) || year % 400 == 0,它准确体现“能被4整除但不能被100整除,或能被400整除”的规则,括号确保逻辑分组清晰,避免运算符优先级导致的误判。

判断闰年的核心逻辑是:年份能被4整除但不能被100整除,或者能被400整除。Java 中用 &&、||、! 组合这些条件即可,关键在于准确表达“排除”和“包含”的优先级。
闰年规则对应的布尔表达式
根据公历规则:
- 能被4整除 且 不能被100整除 →
(year % 4 == 0) && (year % 100 != 0) - 能被400整除 →
year % 400 == 0 - 两者满足其一即为闰年 → 用
||连接
完整表达式:(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
为什么括号不能省略
&& 优先级高于 ||,但加括号更安全、可读性更强:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 不加括号写成
year % 4 == 0 && year % 100 != 0 || year % 400 == 0逻辑上等价,但易误读 - 明确分组后,一眼看出“前半部分是一组条件,后半部分是例外情况”
- 尤其在嵌入 if 或三元运算符时,括号避免歧义
封装成方法并验证几个典型年份
推荐写成静态工具方法:
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
测试结果示例:
-
isLeapYear(2000)→ true(能被400整除) -
isLeapYear(1900)→ false(能被100整除但不能被400整除) -
isLeapYear(2024)→ true(能被4整除且不能被100整除) -
isLeapYear(2023)→ false(不能被4整除)
常见误区提醒
容易错写的几种情况:
- 写成
year % 4 == 0 || year % 400 == 0→ 忽略了100的排除规则,1900会被误判为闰年 - 写成
year % 4 == 0 && year % 100 != 0 && year % 400 == 0→ 要求同时满足三个条件,永远为 false - 用
!否定整个表达式来“取反”,却没理清原逻辑,导致条件颠倒
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










