public class AAA {
int x; // 0
public static void main(String[] args) {
int y;
AAA a = new AAA();
// y = 3 / a.x; // ArithmeticException
System.out.println(a.x);
}
}
我预想的结果是报错:尚未初始化变量x,但是最后结果是说x = 0。 为什么此处x默认为0,是因为x是全局变量吗?
在java中,局部变量不初始化会报错
而全局变量和成员变量会有默认值
这里x是类AAA 的成员变量,不是全局变量
成员变量 如果没有初始化都会有个默认值, 基本数据类型就是各自对应的0值,对象就是null
只有局部变量 ,未初始化就使用才会有问题
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在Java中,实例变量会在对象被创建时自动初始化为默认值,而默认值是与类型有关的。对于int类型,其默认值为0。因此在上述代码中,当创建了一个AAA对象时,其中的实例变量x会被自动初始化为0,即使没有显式地对其进行赋值。
`
在方法中声明的局部变量没有默认值,必须显式地进行初始化后才能使用,否则编译器会提示错误。在代码中,因为变量y没有被初始化,所以会报错。
我个人觉得,你定义的x是AAA类中的成员变量,然后用AAA()构造器构造了a这个对象并对类中的对象进行初始化,而x是int型的,初始化的值是0