我知道,这是一个非常基本的话题,所以如果是重复的问题,请提供参考。
说,有以下代码:
public class Point {
int x = 42;
int y = getX();
int getX() {
return x;
}
public static void main (String s[]) {
Point p = new Point();
System.out.println(p.x + "," + p.y);
}
}
输出:42,42
但是如果我们改变变量外观的顺序:
public class Point {
int y = getX();
int x = 42;
int getX() {
return x;
}
public static void main (String s[]) {
Point p = new Point();
System.out.println(p.x + "," + p.y);
}
}
输出:42,0
据我所知,在第二种情况下,情况可以描述为:“好的,我不知道返回的x值是什么,但是有一些价值”。我不完全理解的是,在没有看到x及其价值的情况下,可以看到x。这是编译时间和运行时间的问题吗?提前谢谢。
答案 0 :(得分:7)
在Java中创建int
时,它会自动初始化为0
。那么第二个代码的作用是创建两个整数x
和y
将它们都设置为0
,然后将y
设置为x
的值0
42
然后将x设置为值{{1}}。
答案 1 :(得分:2)
int
的默认值为0。
答案 2 :(得分:1)
因此,在编译时,编译器正在生成指令,为x和y留出空间(内存)并将其值设置为0
在运行时,JVM填充Point对象(为其分配内存)并为x和y分配内存和初始值0。
然后,运行时初始化代码开始执行并将y设置为0,然后将x设置为42(在第二种情况下)