You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中if语句未执行问题:ID值相等却不触发分支

问题:字符串内容一致但if分支未触发

我的Java代码:

System.out.println("Inside loop");
System.out.println(customer.getCustId());
System.out.println(customer.getPhone());
System.out.println(transaction.getCustId());
if(transaction.getCustId() == customer.getCustId()) {
    System.out.println("Found one transaction");
    System.out.println(transaction);
    filteredTransaction.add(transaction);
}

控制台输出:

Inside loop
446bdfd3-3d09-43e7-83df-1883f967d296
9818122018
446bdfd3-3d09-43e7-83df-1883f967d296
Inside loop
446bdfd3-3d09-43e7-83df-1883f967d296
9818122018
446bdfd3-3d09-43e7-83df-1883f967d296
Inside loop
446bdfd3-3d09-43e7-83df-1883f967d296
9818122018
446bdfd3-3d09-43e7-83df-1883f967d296
Inside loop
446bdfd3-3d09-43e7-83df-1883f967d296
9818122018
446bdfd3-3d09-43e7-83df-1883f967d296
Inside loop
446bdfd3-3d09-43e7-83df-1883f967d296
9818122018
446bdfd3-3d09-43e7-83df-1883f967d296
Inside loop
446bdfd3-3d09-43e7-83df-1883f967d296
9818122018
446bdfd3-3d09-43e7-83df-1883f967d296

可以看到transaction.getCustId()和customer.getCustId()的字符串内容完全相同,但if分支始终未执行。


原因与解决方法:

Java中,==用于字符串时,比较的是对象的内存引用,而非字符串内容。即使两个字符串内容完全一致,只要它们是不同的String对象,==就会返回false。

正确的做法是使用equals()方法比较字符串内容:

if(transaction.getCustId().equals(customer.getCustId())) {
    // 原有逻辑代码
}

如果担心其中某个字符串可能为null,避免空指针异常,可以用Objects.equals()(需导入java.util.Objects):

if(Objects.equals(transaction.getCustId(), customer.getCustId())) {
    // 原有逻辑代码
}

内容的提问来源于stack exchange,提问作者Bibek Bhattarai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:55:12