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

How and when a static final field value is calculated?

这个字段的值是在我每次访问它时计算的还是在开始时被 1.73 替换...?

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

我认为不是,但是直接输入值有什么好处吗?我在某人的代码中看到了

在您发布的代码中,SQRT_3 字段将在加载 class 时初始化,调用 Math.sqrt(3)。稍后,当您访问该字段时,您将获得第一次调用返回的值,并且 Math.sqrt 不再被调用。

直接将值相加而不是用Math.sqrt计算的优点是该值将是一个常量表达式,可以由编译器内联。不过,这是一个真正的微优化。衡量瓶颈在哪里并加以解决,不要为小事操心。