(在 java 或 c# 中)之间是否有区别:
public class Foo {
Bar1 bar1;
Bar2 bar2;
public Foo(Bar1 bar1, Bar2 bar2) {
this.bar1 = bar1;
this.bar2 = bar2;
}
}
和
public class Foo {
Bar1 bar1 = null;
Bar2 bar2 = null;
public Foo(Bar1 bar1, Bar2 bar2) {
this.bar1 = bar1;
this.bar2 = bar2;
}
}
对于对象,是否分配 null 应该无关紧要 - 它是隐式的,对吧?
我的老板坚持要为每个值分配 null
。对于字符串,我理解分配 String str = ""
,因为那里有很大的不同,但我不太清楚为什么对象如此重要。
此外,执行以下操作是否是不好的做法:
public class Foo {
Bar1 bar1 = new Bar1();
Bar2 bar2 = new Bar2();
public Foo(Bar1 bar1, Bar2 bar2) {
this.bar1 = bar1;
this.bar2 = bar2;
}
}
最佳答案
无需显式将实例变量初始化为默认值。在 Java 和 C# 中,实例变量在创建实例时被赋予默认值。在构造函数主体运行之前,引用类型已经为 null。 int
已经是 0,等等。在第一个代码片段中,bar1 和 bar2 已经是 null。没有需要像第二个片段那样明确说明。
在第二个示例(第三个代码段)中,如果您所做的只是用构造函数中的另一个引用覆盖,则绝对没有必要将实例变量实例化为 new Bar1();
。
当构造函数尚未立即用提供的参数覆盖它时,默认值应该不是类型的默认值时,您可能希望将成员变量初始化为一个值。但是将它设置为默认值是多余的。但是,如果它可以帮助您的老板或团队的其他成员了解这些默认值是什么,那就这样吧。
关于c# - 设置和实例化类级变量的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859686/