gpt4 book ai didi

java - 在构造函数或字段声明中初始化列表

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:10 25 4
gpt4 key购买 nike

我想知道初始化 ArrayList<> 等对象和字段声明或构造函数中的内容是否有区别。

在内存使用、性能或类似方面有差异还是完全相同?

选项 1:

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

选项 2:

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

这可能是一个愚蠢的问题,或者是一个非常基础的问题,但我喜欢从头开始构建,我喜欢理解我所看到的一切。

最佳答案

有一个区别:何时 初始化发生。首先初始化字段,然后触发构造函数。

在您的简单示例中,没有实际区别,但如果另一个字段依赖于 List 字段进行初始化,则构造函数版本会因 NPE 而爆炸。

考虑:

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

如果将 strings 的初始化移动到构造函数,则 stringsDescription 的初始化会因 NPE 而爆炸。

关于java - 在构造函数或字段声明中初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com