2013-06-11 13 views
6

Als Titel wirklich ... Wenn Klasse X strictfp deklariert und Methoden in Klasse Y aufgerufen wird, wird Strenge erzwungen, oder gilt dies nur für X eigenen Code?Deklariert eine Java-Klasse strictfp bedeuten Methoden, die es in anderen Klassen aufrufen auch strictfp?

Zusätzlich, wenn ich einen Wert in einer strictfp-Klasse-Methode berechnen und es in eine nicht-strictfp-Methode übergeben, ist der Wert immer noch "sicher", wenn keine weiteren Berechnungen damit gemacht werden?

Antwort

4

Soweit ich verstehe strictfp zu Umfang mit diesem Begriff markiert begrenzt ist. Dies bedeutet, dass Berechnungen der markierten Klasse oder Methode als tragbar angezeigt werden.

Es kann den Effekt nicht auf referenzierten Code propagieren. Wenn zum Beispiel foo()strictfp ist, aber bar() von einer anderen Klasse aufgerufen wird, die nicht strictfp ist, sind die Berechnungen innerhalb bar() nicht tragbar, aber Berechnungen innerhalb foo() werden. Wenn also die Ergebnisse bar() in foo() verwendet werden, ist das Gesamtergebnis möglicherweise nicht tragbar.

public strictfp double foo() { 
    return bar() * 3.1415926; 
} 
public double bar() { 
    return 2.718281828 * 2.0; 
} 

Dieses Ergebnis 2.718281828 * 2.0 ist nicht tragbar, aber seine Multiplikation mit 3.1415926 ist.

+0

Ich weiß nicht einmal, was tragbare Mittel. – fungusanthrax

+0

Wenn Sie diesen Code irgendwo anders ausführen - das Ergebnis wird immer das gleiche sein, egal welches Betriebssystem Sie verwenden oder welcher Prozessor usw. – bartektartanus

0

Es gilt nur für Ausdrücke in Methoden, die in dieser Klasse deklariert sind.

Vom jGuru Artikel What is the strictfp modifier for? When would I consider using it?:

Die strictfp Schlüsselwort beiden Klassen und Methoden angewendet werden können. Für Klassen (und Schnittstellen) gibt es an, dass alle Ausdrücke in allen Methoden der Klasse FP-strikt sind.

Ihre zweite Frage zu beantworten: Ja, ein Floating-Point-Wert wird „sicher“ sein, wenn es zu weiteren Berechnungen nicht mehr Gegenstand ist, da strictfp nur auf Ausdrücke gilt.

Verwandte: When should I use the "strictfp" keyword in java?

2

Von der Java Language Specification:

Die Wirkung des strictfp Modifikator alle float oder double Ausdrücke machen innerhalb der Klassendeklaration (auch innerhalb Variableninitialisierungen, Instanz initializers, statische Initialisierungen und Konstrukteure) sein explizit FP-streng.

[Hervorhebung von mir]

Verwandte Themen