Java初始化变量递增

3

使用另一个全局变量初始化全局变量是否存在风险?

示例:

int a=0; 
int b=a++; 
int c=a++; 
int d=a++; 

这应该输出:

0,1,2,3

编译器是否可能在读取其他全局值之前读取全局值?

你是如何获取输出的? - Blip
1
你的意思是说 a==0, b==1, c==2, d==3 吗? - Blip
也许开发人员以后会想要更改原始值。 - Cristik
全局变量应该改为公共静态吗?我怀疑 Java 中是否存在“全局”这个术语。 - Srinath Ganesh
@Jägermeister 这个问题基本上是:编译器/JVM 可以在 a 之前读取/使用 b 的值吗? 答案是:不行,编译器不会允许这样做。 - Luiggi Mendoza
显示剩余4条评论
2个回答

4
它将按预期运作。如果您在定义字段之前尝试使用该字段,编译器将抛出错误:
public class Foo {
    int a = b++; //compiler error here
    int b = 0;
}

我会尽力帮助您进行翻译。以下是需要翻译的内容:

这在 JLS 8.3 中有详细介绍。

对于您的情况,如果变量没有被修改,它们的输出将会是:

a = 3
b = 0
c = 1
d = 2

3

结果将会是a=3, b=0, c=1, d=2

如果所有变量都在一个类中声明,它们将按代码中出现的顺序进行初始化。

注:由于a ++会先获取值再增加变量,所以b = 0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接