为什么默认情况下将Integer变量指定为null?

wel*_*uci 6 java null object primitive-types

我正在itester.org上进行测试,发现了一个我不明白的问题:

public class Runner 
{
    public static Integer i;

    public static void main(String[] args) 
    {
        if (i == 42) {
            System.out.printf("wow");
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

我之前读过,默认情况下会分配整数变量0.为什么分配null在这里?

Era*_*ran 7

任何引用类型(即任何类型为Object或Object的子类的变量)的默认值为null.这包括Integer.

int另一方面,基元的默认值为0.


Mar*_*oun 5

因为JLS 4.12.5.变量的初始值:

对于所有引用类型(第4.3节),默认值为null.

因为它Integer是一个引用类型,它得到null:

ReferenceType:
    ClassOrInterfaceType
    TypeVariable
    ArrayType
Run Code Online (Sandbox Code Playgroud)

请参阅其他类型的链接


Ben*_*Ben 5

int默认情况下,基元类型被指定为0,但默认情况下会将Integer引用指定为null.Integer是一个包装类 - 它是一个对象,而不是一个原始类型.

您可能想要了解Java中的自动装箱和拆箱,Java是在原始类型和包装类之间自动转换的过程.