我想知道我是否应该使用初始值初始化java中的类成员,然后将该值更改为构造函数中的其他给定值,还是应该避免这样做?
代码示例
public class Test {
private int value = 5;
public Test(int value) {
this.value = value;
}
}
答案 0 :(得分:4)
如果未指定,则:
原始byte
s,short
s,int
s,long
s,float
s和double
s被初始化为0 < / p>
boolean
被初始化为假
对象初始化为null
答案 1 :(得分:2)
如果我们讨论的是类字段而不是
的所有变量0
(int
,long
,double
等数字代码...)\u0000
(char
)false
(boolean
)。 String
,Integer
或AnyOtherClass
等对象类型设置为null
所以实际上如果你明确地设置它并不重要,因为
private int x;
private Integer y;
相当于
private int x = 0;
private Integer y = null;
答案 2 :(得分:1)
Java给出了值类变量,我的意思是它们是由JVM初始化的,你可以使用它们。但您必须搜索其默认值才能正确使用它们。
另一方面,JVM不初始化在方法中创建的局部变量。因此,如果您在方法上创建任何变量,则必须在使用它们之前将它们分配给值。
答案 3 :(得分:0)
未初始化的int在堆上始终为0。它永远不能为空。记住:在一个方法中,它必须被初始化,而不仅仅是声明。
答案 4 :(得分:0)
首先,您无法使用int
初始化null
值。 int
的默认值为零,但在字段声明和构造函数中初始化它是没有意义的。假设编译器没有完全省略字段初始化程序,它有效地编译为:
public class Test {
private int value;
public Test(int value) {
this.value = /* field initializer value */;
this.value = value;
}
}
除非您想要使用非默认值(非零,非空)初始化字段,否则通常没有理由添加初始值设定项。如果初始化器是冗余的,则尤其如此,如上所述。字段的默认值是&#34;清零&#34;字段类型的值,例如,数字类型为0
,false
为boolean
,对象为null
。请注意, 是关于字段的例外:final
字段必须具有初始值设定项(如果它们未在每个构造函数中分配一次; final
字段没有隐式默认值。
现在,可能需要初始化方法变量以确保它们在读取时具有值,因为变量没有字段那样的默认/隐含初始值设定项。是否需要显式初始化程序取决于方法的控制流程。