声明Java类strictfp是否意味着它在其他类中调用的方法也是strictfp?

时间:2013-06-11 19:57:56

标签: java strictfp

真的是标题......如果类X被声明为strictfp并且调用类Y中的方法,那么是否会强制执行,或者这只适用于X自己的代码?

此外,如果我在strictfp类方法中计算一个值并将其传递给非strictfp方法,如果没有进行进一步的计算,该值是否仍然“安全”?

3 个答案:

答案 0 :(得分:4)

据我所知strictfp仅限于使用此关键字标记的范围。这意味着它会使标记类或方法的计算变得可移植。

它无法将效果传播到引用的代码。例如,如果foo()strictfp,但它从非bar()的其他类调用strictfp,则bar()内的计算将无法移植,内部foo()将是。因此,如果在bar()中使用foo()的结果,则整体结果可能无法移植。

public strictfp double foo() {
    return bar() * 3.1415926;
}
public double bar() {
    return 2.718281828 * 2.0;
}

此结果2.718281828 * 2.0不可移植,但其乘以3.1415926是。

答案 1 :(得分:2)

来自Java Language Specification

  

strictfp修饰符的作用是使类声明中的所有float或double表达式(包括在变量初始化器,实例初始化器,静态初始化器和构造函数中)显式为FP-strict。 / p>

[我的重点]

答案 2 :(得分:0)

它仅适用于该类中声明的方法中的表达式。

来自jGuru文章What is the strictfp modifier for? When would I consider using it?

  

strictfp关键字可以应用于类和方法。对于类(和接口),它指定类的所有方法中的所有表达式都是 FP-strict

回答你的第二个问题:是的,浮点值将是"安全"一旦它不再需要进一步计算,因为strictfp仅适用于表达式。

相关:When should I use the "strictfp" keyword in java?