我只是想知道,是这样的:
static{ i = 10; }
static Integer i = 7;
static{ i = 12; }
与此相同:
static Integer i;
static{
i = 10;
i = 7;
i = 12;
}
它会被编译成相同的字节码吗?
答案 0 :(得分:2)
static{ i = 10; }
static Integer i = 7;
static{ i = 12; }
将定义一个名为i
的静态变量,并将其值设置为 10 ,no 7 ,no 12.非常糟糕的样式,因为最终变量取决于陈述的顺序。
static{
Integer i = 10;
i = 7;
i = 12;
}
另一方面,将创建一个变量i
,它存在整行三行,值为10,7和12,之后被遗忘/不再可访问。极度无用。
Integer i;
static{
i = 10;
i = 7;
i = 12;
}
但是根本不会编译 - 因为i
不能是静态上下文的引用。
static Integer i;
static{
i = 10;
i = 7;
i = 12;
}
将产生与第一种方法相同的结果。然而,我不会在这里比较字节码。
答案 1 :(得分:0)
static
块就像另一个块一样。内部的任何变量都具有该块的范围。甚至不是兄弟static
块。
这意味着,在你问题中实现的第二个方式中,Integer i
是static
块的本地,而不是静态类成员,在块外不可用