方法——返回0长度的数组或集合,而不是 null

很多方法需要返回一个数组或集合

比如常见的 service 方法中,我们需要查询满足条件的集合

public List<T> getByNameLike(String name){
    return mapper.selectByNameLike(name);
} 

在非常多的返回集合的场景中,null 与 0长度集合都表示没有符合条件的结果,也就是多数时候,他们是等价的,而本条目讨论的就是这种情况

至于说 null 和空集合意义不同的场景,那就无需讨论,该返回什么就返回什么。

  1. 返回 null 有一个比较直接的优势,性能优势,避免了分配这一点点内存,当然也就节省了后续的一点点 gc
  2. 永远返回0长度的集合则在后续的直接操作中非常方便,可以直接循环或者 调用相应方法
  3. 与之相对的,当然就是空集合或数组的分配内存开销,不过,这种开销是非常微弱的,对性能的影响微乎其微,除非是这个方法在程序中执行占比非常之大。大多数时候,实际测试,你会发现,这个方法循环几百万遍甚至几千万遍,与几个 jdbc 或者 几遍 redis 等交互的性能差不多。也就是外部交互与内存中操作的性能差异在好几个数量级
  4. 即便这个方法真的是非常常用的,比如工具类一样的函数,依然有办法去优化,去尽量缩小这样的性能差异
public List<T> getByNameLike(String name){
    List<T> list =  mapper.selectByNameLike(name);
    if(list== null){
        return Collections.emptyList();
    }
    return list;
} 

总结:

在方法的返回值中, null 和 空集合/数组 可能有不同的意义或相同的意义,本条目针对的是相同意义下应该返回什么

null 有微弱的性能优势,即便是这样的优势,空集合/数组也能通过优化来无限接近 null 的性能

当然最不合适的就是有些情况返回 null,有时候又返回空集合,这种情况使用者总要做两种判断来处理,并且可能造成意义上的困扰

对于空的返回值选择

[空集合/数组]     优于     null    优于      [可能空集合/数组 ,也可能 null]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值