确实是标题...如果将类X声明为strictfp并在类Y中调用方法,则将强制执行严格性,还是仅适用于X自己的代码?

另外,如果我使用strictfp类方法计算值并将其传递给非strictfp方法,那么如果不进行任何进一步的计算,该值是否仍然“安全”?

最佳答案

据我了解,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的乘积是可移植的。

10-05 19:13