真的是标题......如果类X被声明为strictfp并且调用类Y中的方法,那么是否会强制执行,或者这只适用于X自己的代码?
此外,如果我在strictfp类方法中计算一个值并将其传递给非strictfp方法,如果没有进行进一步的计算,该值是否仍然“安全”?
答案 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
仅适用于表达式。