Java初始化变量是否为null?

时间:2014-08-21 19:23:29

标签: java initialization primitive-types

我想知道我是否应该使用初始值初始化java中的类成员,然后将该值更改为构造函数中的其他给定值,还是应该避免这样做?

代码示例

public class Test {
    private int value = 5;

    public Test(int value) {
        this.value = value;
 }
}

5 个答案:

答案 0 :(得分:4)

如果未指定,则:

原始byte s,short s,int s,long s,float s和double s被初始化为0 < / p>

boolean被初始化为假

对象初始化为null

答案 1 :(得分:2)

如果我们讨论的是类字段而不是

的所有变量
  • 基本类型设置为
    • 0intlongdouble等数字代码...)
    • \u0000char
    • falseboolean)。
  • StringIntegerAnyOtherClass等对象类型设置为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;字段类型的值,例如,数字类型为0falseboolean,对象为null。请注意, 是关于字段的例外:final字段必须具有初始值设定项(如果它们未在每个构造函数中分配一次; final字段没有隐式默认值。

现在,可能需要初始化方法变量以确保它们在读取时具有值,因为变量没有字段那样的默认/隐含初始值设定项。是否需要显式初始化程序取决于方法的控制流程。