使用另一个全局变量初始化全局变量是否存在风险?
示例:
int a=0;
int b=a++;
int c=a++;
int d=a++;
这应该输出:
0,1,2,3
编译器是否可能在读取其他全局值之前读取全局值?
public class Foo {
int a = b++; //compiler error here
int b = 0;
}
这在 JLS 8.3 中有详细介绍。
对于您的情况,如果变量没有被修改,它们的输出将会是:
a = 3
b = 0
c = 1
d = 2
结果将会是a=3, b=0, c=1, d=2
。
如果所有变量都在一个类中声明,它们将按代码中出现的顺序进行初始化。
注:由于a ++
会先获取值再增加变量,所以b = 0
。
a==0, b==1, c==2, d==3
吗? - Blipa
之前读取/使用b
的值吗? 答案是:不行,编译器不会允许这样做。 - Luiggi Mendoza