【java】声明变量赋值为null和不赋值有没有区别

比如下面这段代码:
public class A {
A a;
}

public class A {
A a = null;
}
这两种写法有没有区别

成员变量的话要看有没有用final修饰。

如果没有被final成员变量不需要显式的赋值,因为它会有一个初始化的过程,初始化会赋为默认值。
就像你上面代码中的那样,并没有什么区别。

如果被final修饰,(即常量)则必须声明时就进行赋值,否则编译报错。因为常量是不能被修改的,所以这一点应该很好理解。

如果是局部变量则必须显式的赋值,否则编译报错,因为它没有初始化的过程。
这里是必须显式的赋值,不是声明时就进行赋值,注意和常量的区别。

在全局变量没啥区别,局部变量有问题。

你应该去了解下 java 的类初始化过程。
初始化过程中,JVM 会默认将成员变量赋值,
引用类型为 null
即 a 赋值为 null

如果是定义引用数据类型的变量 , 那么会自动初始化为null