加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – !list.isEmpty()和list.size()> 0,条件相同?

发布时间:2020-12-15 04:49:33 所属栏目:Java 来源:网络整理
导读:我看到这样的代码. if (!substanceList.isEmpty() (substanceList.size() 0)){ substanceText = createAmountText(substanceList);} 并且,可以像这样重构它. if (!substanceList.isEmpty()){ substanceText = createAmountText(substanceList);} 我想对上面
我看到这样的代码.

if (!substanceList.isEmpty() && (substanceList.size() > 0))
{
  substanceText = createAmountText(substanceList);
}

并且,可以像这样重构它.

if (!substanceList.isEmpty())
{
  substanceText = createAmountText(substanceList);
}

我想对上面的代码进行一些解释并想知道第二种方式可能会引起一些错误.

解决方法

如有疑问,请阅读Javadoc:

Collection.isEmpty()

Returns true if this collection contains no elements.

Collection.size()

Returns the number of elements in this collection

因此,假设集合正确实现:

collection.isEmpty() <=> collection.size() == 0

或者,相反:

!collection.isEmpty() <=> collection.size() != 0

由于元素的数量应该只是正数,这意味着:

!collection.isEmpty() <=> collection.size() > 0

所以是的,这两种形式是等价的.

警告:实际上,如果你的集合没有同时从另一个线程修改,它们只是等价的.

这个:

!substanceList.isEmpty() && (substanceList.size() > 0)

相当于我上面提到的逻辑:

!substanceList.isEmpty() && !substanceList.isEmpty()

你只能简化这个

!substanceList.isEmpty()

如果你可以保证它的值在substanceList.isEmpty()的评估之间不会改变.

实际上,您不太可能需要关心这些情况之间的差异,至少在代码的这一点上.您可能需要关心在另一个线程中更改的列表,但是,如果它在执行createAmountText之前(或同时)变为空.但这不是重构所引入的.

TL; DR:使用if(!substanceList.isEmpty()){做了几乎相同的事情,并且更清楚地阅读.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读