În Java strictfp este un modificator care reprezintă virgulă mobilă strictă, care nu a fost introdus în versiunea de bază a Java, așa cum a fost introdus în versiunea Java 1.2. Este folosit în Java pentru a restricționa calculele în virgulă mobilă și pentru a asigura același rezultat pe fiecare platformă în timp ce se efectuează operațiuni în variabila în virgulă mobilă.
Calculele în virgulă mobilă sunt dependente de platformă, adică se obțin rezultate diferite (valori în virgulă mobilă) atunci când un fișier de clasă este rulat pe platforme diferite (procesoare de 16/32/64 de biți). Pentru a rezolva acest tip de problemă, cuvântul cheie strictfp a fost introdus în versiunea JDK 1.2 urmând IEEE 754 standarde pentru calcule în virgulă mobilă.
Nota: Modificatorul strictfp este utilizat numai cu interfețele și metodele de clase, dar nu este aplicabil pentru a se aplica cu variabile, așa cum este ilustrat mai jos:
Ilustrația 1: Utilizarea cuvintelor cheie cu clase
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Ilustrația 2: Utilizarea cuvintelor cheie cu interfețele
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
Ilustrația 3: Utilizarea cuvintelor cheie cu metoda abstractă într-o interfață
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
Din ilustrațiile de mai sus se pot trage câteva concluzii, după cum urmează:
- Când o clasă sau o interfață este declarată cu modificatorul strictfp, atunci toate metodele declarate în clasă/interfață și toate tipurile imbricate declarate în clasă sunt implicit strictfp.
- strictfp nu poate fi folosit cu metode abstracte. Cu toate acestea, poate fi folosit cu clase/interfețe abstracte.
- Deoarece metodele unei interfețe sunt implicit abstracte strictfp nu pot fi utilizate cu nicio metodă din interiorul unei interfețe.
- Din versiunea Java 17, cuvântul cheie strictfp NU este necesar în mod explicit, deoarece toate expresiile în virgulă mobilă sunt strict evaluate.
Exemplu:
Java// Java program to illustrate strictfp modifier // Usage in Classes // Main class class GFG { // Method 1 // Calculating sum using strictfp modifier public strictfp double sum() { double num1 = 10e+10; double num2 = 6e+08; // Returning the sum return (num1 + num2); } // Method 2 // Main driver method public static void main(String[] args) { // Creating object of class in main() method GFG t = new GFG(); // Here we have error of putting strictfp and // error is not found public static void main method System.out.println(t.sum()); } }
Ieșire
1.006E11
Ieșire:
Mai jos putem vedea ieșirea în consolă.