As title really ...如果X類被聲明爲strictfp並且調用Y類中的方法,那麼會嚴格執行,還是僅適用於X自己的代碼?是否聲明一個Java類strictfp是否在其他類中調用的方法也是strictfp?
此外,如果我在一個strictfp類方法計算的值,並將其傳遞到非strictfp方法,是價值仍然是「安全的」,如果沒有進一步的計算用它做?
As title really ...如果X類被聲明爲strictfp並且調用Y類中的方法,那麼會嚴格執行,還是僅適用於X自己的代碼?是否聲明一個Java類strictfp是否在其他類中調用的方法也是strictfp?
此外,如果我在一個strictfp類方法計算的值,並將其傳遞到非strictfp方法,是價值仍然是「安全的」,如果沒有進一步的計算用它做?
據我瞭解strictfp
僅限於標有此關鍵字的範圍。這意味着它會使標記的類或方法的計算變得可移植。
它不能將效果傳播到引用的代碼。例如,如果foo()
爲strictfp
,但它從某個非strictfp
的其他類調用bar()
,則bar()
內的計算將不可移植,但foo()
內的計算結果將爲。因此,如果foo()
中使用bar()
的結果,則整體結果可能不可移植。
public strictfp double foo() {
return bar() * 3.1415926;
}
public double bar() {
return 2.718281828 * 2.0;
}
這個結果2.718281828 * 2.0
不便攜,但是它乘以3.1415926
是。
它只適用於在該類中聲明的方法中的表達式。
從jGuru文章What is the strictfp modifier for? When would I consider using it?:
的
strictfp
關鍵字可以被施加到兩個類和方法。對於類(和接口),它指定該類的所有方法中的所有表達式都是FP-strict。
要回答你的第二個問題:是的,一旦浮動點值不再需要進一步計算,浮點值將是「安全的」,因爲strictfp
僅適用於表達式。
strictfp修飾符的作用是使類聲明(包括內變量初始化,例如初始化器,靜態初始化,並構造函數)之內的所有浮點或雙精度表達式是明確FP-嚴格。
[我的重點]
我甚至不知道什麼便攜式手段。 – fungusanthrax
如果您在其他地方運行此代碼 - 無論您使用何種操作系統或哪種處理器等,結果都將始終如一。 – bartektartanus