6

就像标题一样...如果将 X 类声明为 strictfp 并调用 Y 类中的方法,是否会强制执行严格性,或者这只适用于 X 自己的代码?

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

4

3 回答 3

4

据我了解strictfp,仅限于用 this 关键字标记的范围。这意味着它导致标记类或方法的计算是可移植的。

它不能将效果传播到引用的代码。例如,如果foo()isstrictfp但它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

于 2013-06-11T20:08:41.703 回答
2

From the Java Language Specification:

The effect of the strictfp modifier is to make all float or double expressions within the class declaration (including within variable initializers, instance initializers, static initializers, and constructors) be explicitly FP-strict.

[my emphasis]

于 2013-06-11T23:53:19.127 回答
0

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

来自 jGuru 文章What is the strictfp modifier for?我什么时候会考虑使用它?

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

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

相关:我什么时候应该在 java 中使用“strictfp”关键字?

于 2013-06-11T20:03:22.247 回答