常量靠左是防止将==误写为=的有效写法,适用于数值、布尔、字符串、枚举等类型,但需权衡可读性与浮点数等特殊场景。

常量靠左是防止把 == 误写成 = 的有效写法,Java 编译器会在赋值语句出现在条件位置时报错,从而提前暴露问题。
基本写法:常量在前,变量在后
所有涉及相等判断的条件中,把字面量或 final 常量放在比较操作符左侧:
-
正确:
if (10 == score)、if ("POST".equals(method))、if (Status.ACTIVE == user.getStatus()) -
错误:
if (score == 10)(语法合法但无法拦截=误写)、if (method.equals("POST"))(可能触发空指针)
字符串和对象判等必须用 equals,且常量前置
避免 null 导致 NullPointerException,同时兼顾防误写:
- 用
"admin".equals(role),而不是role.equals("admin") - 枚举比较可用
Role.ADMIN == user.getRole(),既安全又高效 - 若使用
Objects.equals(a, b),则无需关心顺序,但失去编译期防护能力
数值与布尔类型也适用该原则
不只是字符串,整数、布尔、字符等基础类型同样推荐常量前置:
-
if (true == flag)或if (Boolean.TRUE == flag) if ('Y' == statusChar)-
if (0 == count)比if (count == 0)更早捕获count = 0类错误
注意边界:不适用于所有场景
常量靠左不是万能规则,需结合语义和可读性权衡:
- 当变量名本身更具可读性时(如
if (user.isVerified())),无需强行改成if (true == user.isVerified()) - 浮点数比较不用
==,应改用误差范围,如Math.abs(a - b) ,此时无左右之分 - 涉及多个运算符的复合表达式(如
a + b > c),重点在逻辑清晰,不强求“常量靠左”










