在java中使用之前初始化变量
我已经玩了一段时间这段代码,它让我困惑,为什么这个方法调用似乎返回一个数字,尽管它最初没有设置为0
public class MainProg {
public static void main(String[] args) {
FixedCapacitySizeOfStrings s = new FixedCapacitySizeOfStrings(3);
System.out.println("(" + s.size() + " left on stack)");
}
}
这是API代码
public class FixedCapacitySizeOfStrings {
private String[] a;
private int N;
public FixedCapacitySizeOfStrings(int cap) {
a = new String[cap];
}
public boolean isEmpty() {
return N == 0;
}
public int size() {
return N; //why is this line doing the right thing?? N was never initialized to 0
}
public void push(String item) {
a[N++] = item;
}
public String pop() {
return a[--N];
}
}
# 1 楼答案
基本实例变量默认初始化为0。这包括
int
、long
、double
、float
、short
、byte
和char
。(所有非基本实例变量都初始化为null
)请注意,这只是关于实例变量(字段)——局部变量没有初始化
# 2 楼答案
在方法内部时,必须显式初始化变量。在方法0之外,默认值整数被隐式初始化为
因此,即使整数
N
没有在FixedCapacitySizeOfStrings
内赋值,它的值在声明为实例变量(类变量)时隐式为零然而,您的测试用例会抱怨,因为整数
s
没有显式设置为任何值,而是在方法中声明的# 3 楼答案
它给出了s.size()=0,因为N是实例变量,并且正如您所知,如果您想更正该值,那么将其写入为
公共int size(){
上面给出了正确的结果