【发布时间】:2026-02-05 09:15:02
【问题描述】:
我知道这很简单,但我找不到任何问题。
当我检查一个列表是否为空然后对其进行迭代时,它对性能有何影响?
我有以下代码,我想知道对 getContainers() 的第二次调用是否再次执行该方法,或者编译器正在保存列表,因此它不必再次运行 getContainers()。
if (getContainers() != null)
{
for (Container container : getContainers())
{...
如果这不是真的,我正在考虑做一些类似下面这段代码的事情,但它似乎很天真。
List<Container> listC = getContainers();
if (listC != null)
{
for (Container container : listC)
{...
【问题讨论】:
-
第二种方法只调用一次getContainers所以性能更好
-
将简单的 System.out.println() 添加到 getContainers() 中,您将看到结果 =) 对我来说,第二个变体更好。
-
检查对象是否为空对性能几乎没有影响。第二种方法将有更好的性能,因为它不会重复在
getContainers()方法中完成的操作;换句话说,它获得(或未能获得,在null结果的情况下)列表仅一次;但这与检查null本身的性能影响无关。 -
更好的解决方案是将
getContainers()更改为返回Collections.emptyList()而不是null。
标签: java performance list null