java不初始化局部变量和将属性(整数)初始化为0的逻辑是什么?
也许这是个愚蠢的问题?对不起,听起来是这样。我有以下代码
条件1
public class Test {
int a;
void display() {
System.out.println(a);
}
}
条件2
public class Test {
void display() {
int a;
System.out.println(a);
}
}
我非常清楚第二个条件。a
未初始化。因此,这将产生一个错误。但在第一个条件中,我没有初始化属性a
。运行以下代码时,不会产生错误。相反,它将显示0。这可能是因为integer
被初始化为0
Test t;
t = new Test();
t.display();
不初始化局部变量和将属性(整数)初始化为0的逻辑是什么
# 1 楼答案
参见Java语言规范第4.12.5节:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
“每个类变量、实例变量或数组组件在创建时都会用默认值初始化
局部变量在初始化或赋值使用之前,必须明确给定一个值,这种方式可以使用确定赋值规则进行验证
# 2 楼答案
int是一种基本类型,必须初始化,所以java会为您进行初始化
将int更改为Integer,您将得到一个空指针异常
如果以相同的方式创建一个对象,也就是说没有初始化,那么就在堆栈上创建了一个reference=to null。在使用构造函数初始化对象之前,堆上实际上没有对象。初始化对象时,其类值也会初始化。这样,对象的任何用户都可以访问或修改这些值
有一个大的例外,局部变量。因为局部变量通常用于即时计算,所以java不会初始化它们。如果您忘记这样做,java将抛出一个编译器错误,以阻止您使用默认值进行计算