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
相关产品推荐
相关产品推荐

