2015-09-25 47 views
1

是每次访问它时计算的该字段的值还是在1.73 ...开始时被替换?如何以及何时计算静态最终字段值?

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

我认为不是,但有没有什么好处直接把价值?我看到在某人代码中

+1

这不是一个常量变量,因此它不会被编译代码中所有访问点的常量1.73替代。 –

+0

一个编译器可能会做优化。 – ZhongYu

+0

那么做到这一点的“正确”方式是什么? – Spooky

回答

3

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

直接添加该值而不是使用Math.sqrt计算该值的好处是该值将是一个可由编译器内联的常量表达式。不过,这是一个真正的微观优化。衡量瓶颈在哪里,并解决这些问题,不要为小东西出汗。