java – !list.isEmpty()和list.size()> 0,条件相同?
我看到这样的代码.
if (!substanceList.isEmpty() && (substanceList.size() > 0)) { substanceText = createAmountText(substanceList); } 并且,可以像这样重构它. if (!substanceList.isEmpty()) { substanceText = createAmountText(substanceList); } 我想对上面的代码进行一些解释并想知道第二种方式可能会引起一些错误. 解决方法
如有疑问,请阅读Javadoc:
因此,假设集合正确实现: 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()){做了几乎相同的事情,并且更清楚地阅读. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – ConcurrentHashMap中String intern方法的重复数据删
- java – 如何在同一行实例化对象和调用setter?
- java.net.MalformedURLException:未知协议:rsrc
- Java中常见的异常
- java – 在不同的线程中调用Android服务的方法.它仍然在主线
- Spring get方法:获取指定ID编号的实体对象
- java – AChartEngine条形图中网格线上方的图表
- 使用JVisualVM从Java中的远程应用程序获取堆转储
- java – 静态初始化程序与实例初始化程序与构造函数
- java – 部署到Tomcat 7确定但无法访问应用程序