Java中if误用赋值符=会导致编译错误(int转boolean失败)或逻辑错误(布尔变量恒真),应始终用==比较基本类型、equals()比较对象,常量左置可提前捕获错误,IDE警告勿忽略,且必须使用大括号避免悬空else和缩进误导。

if 条件里用了赋值符 = 而不是比较符 ==
Java 中写成 if (a = 5) 是合法语法,但实际执行的是赋值操作,返回值是 5(int 类型),而 if 要求布尔表达式 —— 编译直接报错:incompatible types: int cannot be converted to boolean。但换成布尔变量就容易中招:if (flag = true),这里 = 赋值后返回 true,条件恒成立,逻辑被悄悄破坏。
- 永远用
==比较基本类型,对象用.equals()(==比的是引用) - 把常量放左边可提前暴露错误:写成
if (5 == a),误写为if (5 = a)会编译失败,而不是静默出错 - IDE 通常对
if (b = true)这类给出警告,别忽略黄色波浪线
忘记大括号导致的「悬空 else」和逻辑缩进误导
只有一行语句时省略大括号看似简洁,但后续加代码极易出错。比如:
if (x > 0)
System.out.println("positive");
System.out.println("this always runs"); // 实际不在 if 里!更隐蔽的是嵌套 if:
if (x > 0)
if (y > 0) System.out.println("both positive");
else System.out.println("x <= 0"); // 这个 else 绑定的是内层 if,不是外层- 无论几行,
if、else、for、while后一律加{},这是最省心的防御性写法 - IDE 可配置“自动补全大括号”,启用它
- Git 提交前扫一眼新增的控制流语句,重点看缩进是否和大括号匹配
浮点数直接用 == 判断相等
因为精度丢失,0.1 + 0.2 == 0.3 返回 false。这不是 Java 特有,但新手常在 if 里这么写,结果分支走错。
立即学习“Java免费学习笔记(深入)”;
- 判断浮点数相等,改用差值小于容忍误差:
Math.abs(a - b) - 业务上涉及金额、计数等,优先用
int或BigDecimal,避免 float/double - 如果必须用 double 做条件分支(如阈值判断),确保比较的是大小关系(
、<code>>=),而非相等
空指针在 if 条件中未预防
if (str.equals("abc")) 在 str 为 null 时抛 NullPointerException,而异常不会被 if 捕获,直接中断流程。
- 把字面量放左边:
if ("abc".equals(str)),安全且可读 - 用
Objects.equals(a, b)(JDK 7+),自动处理 null - 如果逻辑依赖非空,先显式判空:
if (str != null && str.length() > 0),别堆在一行里
这些坑不难绕开,但得在写第一行 if 的时候就想好 —— 很多问题不是运行时才暴露,而是合并代码后别人改了上游数据,你的 if 突然开始跳错分支。











