确实是标题...如果将类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
的乘积是可移植的。