2015-11-19 96 views
6

我想知道在初始化对象如ArrayList <>和字段声明或构造函数中是否有区别。在构造函数或字段声明中初始化列表

内存使用情况,性能或类似情况有差别还是完全相同?

选项1:

class MyClass { 
    private List<String> strings = new ArrayList<String>(); 
} 

选项2:

class MyClass { 
    private List<String> strings; 
    public MyClass() { 
     strings = new ArrayList<String>(); 
    } 
} 

这可能是一个愚蠢的问题,还是一个很基本的一个,但我喜欢从一开始建立,我想了解所有我看到的。

回答

1

它本质上是一回事。在构造函数中执行它可以更好地控制它(例如,不同的构造函数可以做不同的事情),但最终的结果是相同的。

在内存,CPU或任何其他方式中,您将看不到任何性能差异。

2

有差别:发生初始化。字段首先被初始化,然后构造函数触发。

在你的微不足道的例子中,没有实际的区别,但是如果另一个字段依赖于List字段进行初始化,那么构造函数版本将会以NPE爆炸。

考虑:

private List<String> strings = Arrays.asList("foo", "bar"); 
private String stringsDescription = strings.toString(); 

如果你感动的strings初始化到构造的stringsDescription初始化将与NPE爆炸。

相关问题