在实际开发中,通常建议采用更清晰、可维护性更好的方式。以下是几种常见写法和它们的优劣分析:
1. 原始写法(推荐)
if (list != null) { for (int i = 0; i < list.size(); i++) { // 业务逻辑 } }优点:
逻辑清晰,先判空再遍历
代码可读性好
符合防御性编程思想
循环条件简单,性能最优
2. 您提出的修改
for (int i = 0; list != null && i < list.size(); i++) { // 业务逻辑 }缺点:
每次循环都要检查
list != null,但list不会在循环中变为null循环条件复杂,可读性降低
不符合常见编程习惯
3. 最佳实践建议
方案一:使用空集合替代null(推荐)
// 在方法开始时初始化或返回空集合 List<String> list = getList() != null ? getList() : Collections.emptyList(); for (int i = 0; i < list.size(); i++) { // 业务逻辑 }方案二:使用for-each循环
if (list != null) { for (String item : list) { // 业务逻辑 } }方案三:使用Optional(Java 8+)
Optional.ofNullable(list) .orElse(Collections.emptyList()) .forEach(item -> { // 业务逻辑 });方案四:工具类方法
public class CollectionUtils { public static <T> void forEach(List<T> list, Consumer<T> action) { if (list != null && action != null) { for (T item : list) { action.accept(item); } } } } // 使用 CollectionUtils.forEach(list, item -> { // 业务逻辑 });4. 性能比较
// 测试不同写法的性能 List<String> list = Arrays.asList("a", "b", "c"); // 写法1:每次循环检查null(不推荐) for (int i = 0; list != null && i < list.size(); i++) { // 每次迭代多一次null检查 } // 写法2:先判空再循环(推荐) if (list != null) { for (int i = 0; i < list.size(); i++) { // 只有一次null检查 } }5. 实际项目建议
// 1. 返回空集合而不是null public List<String> getData() { // 不推荐 // return null; // 推荐 return Collections.emptyList(); } // 2. 在业务层处理 List<String> data = getData(); if (CollectionUtils.isEmpty(data)) { // 处理空数据 return; } for (String item : data) { // 处理数据 }总结
写法 | 可读性 | 性能 | 可维护性 | 推荐度 |
|---|---|---|---|---|
先判空再循环 | 优秀 | 优秀 | 优秀 | ★★★★★ |
循环条件判空 | 一般 | 良好 | 一般 | ★★☆☆☆ |
返回空集合 | 优秀 | 优秀 | 优秀 | ★★★★★ |
建议: 坚持使用原始的if (list != null)写法,这是最清晰、最易维护的方式。同时,在代码设计中尽量返回空集合而不是null,从源头上避免空指针问题。