Java 如何以及何时计算静态最终字段值?

Java 如何以及何时计算静态最终字段值?,java,static,field,constants,final,Java,Static,Field,Constants,Final,该字段的值是每次访问时计算的,还是在开始时被1.73…替换 private static final double SQRT_3 = Math.sqrt(3); 我认为没有,但是直接把价值放在这里有什么好处吗?我在你发布的代码中看到,在某人代码中,SQRT_3字段将在类加载时初始化,调用Math.SQRT(3)。稍后,当您访问该字段时,您将获得第一次调用返回的值,而Math.sqrt将不再被调用 直接添加值而不是使用Math.sqrt计算值的优点是,该值将是一个常量表达式,可以由编译器内联。不

该字段的值是每次访问时计算的,还是在开始时被1.73…替换

private static final double SQRT_3 = Math.sqrt(3);

我认为没有,但是直接把价值放在这里有什么好处吗?我在你发布的代码中看到,在某人代码中,SQRT_3字段将在类加载时初始化,调用Math.SQRT(3)。稍后,当您访问该字段时,您将获得第一次调用返回的值,而Math.sqrt将不再被调用


直接添加值而不是使用Math.sqrt计算值的优点是,该值将是一个常量表达式,可以由编译器内联。不过,这是一个真正的微观优化。测量瓶颈位置并解决这些问题,不要担心小问题。

这不是一个常量变量,因此不会在编译代码的所有访问点被常量1.73所取代。编译器可能会进行优化。那么“正确”的方法是什么呢?硬编码it
SQRT_3=1.7320508075688772