嗯...我无法为这个问题想出更好的标题
我无法理解为什么调用静态方法并将其值分配给另一个静态成员会调用方法 getValue()
两次。
如果我将静态赋值移到 main
方法之后,它不会加载两次。
我知道这很愚蠢,但我是否遗漏了一些明显的东西?
public class Test {
private static Integer value1 = getValue(); // This is causing to load again
private static Integer flag = null;
public static Integer getValue() {
if (flag != null) { // if flag is loaded already, return it.
return flag;
}
System.out.println("Loading value...");
flag = Integer.valueOf(10);
return flag;
}
public static void main(String[] args) {
getValue();
}
private static Integer value2 = getValue(); // This will not cause to load again
}
输出:
Loading value...
Loading value...
最佳答案
让我们逐步了解一些关键行。
这一行:
private static Integer value1 = getValue();
打印“正在加载值...”并将flag
设置为非空值。
然后这一行:
private static Integer flag = null;
将标志
设置回null
。
然后这一行:
private static Integer value2 = getValue();
再次打印“正在加载值...”并再次将flag
设置为非空值。
然后 main
运行,这一行:
getValue();
不打印任何内容,因为 flag
设置为非空值。
关于java - 静态赋值调用该方法两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200503/