A Giava il strictfp è un modificatore che sta per virgola mobile rigoroso che non è stato introdotto nella versione base di Java poiché è stato introdotto nella versione Java 1.2. Viene utilizzato in Java per limitare i calcoli in virgola mobile e garantire lo stesso risultato su ogni piattaforma durante l'esecuzione di operazioni nella variabile in virgola mobile.
I calcoli in virgola mobile dipendono dalla piattaforma, ovvero si ottiene un output diverso (valori in virgola mobile) quando un file di classe viene eseguito su piattaforme diverse (processori a 16/32/64 bit). Per risolvere questo tipo di problema è stata introdotta la parola chiave strictfp nella versione JDK 1.2 come segue IEEE754 standard per i calcoli in virgola mobile.
Nota: Il modificatore strictfp viene utilizzato solo con le interfacce e i metodi delle classi, ma non è applicabile con le variabili come illustrato di seguito:
Illustrazione 1: Utilizzo delle parole chiave con le classi
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
Illustrazione 2: Utilizzo delle parole chiave con le interfacce
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
Illustrazione 3: Utilizzo delle parole chiave con il metodo Abstract in un'interfaccia
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
Dalle illustrazioni sopra riportate si possono trarre alcune conclusioni come segue:
- Quando una classe o un'interfaccia viene dichiarata con il modificatore strictfp, tutti i metodi dichiarati nella classe/interfaccia e tutti i tipi nidificati dichiarati nella classe sono implicitamente strictfp.
- strictfp non può essere utilizzato con metodi astratti. Tuttavia può essere utilizzato con classi/interfacce astratte.
- Poiché i metodi di un'interfaccia sono implicitamente astratti, strictfp non può essere utilizzato con alcun metodo all'interno di un'interfaccia.
- Dalla versione Java 17 la parola chiave strictfp NON è richiesta esplicitamente poiché tutte le espressioni a virgola mobile vengono valutate rigorosamente.
Esempio:
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()); } }
Produzione
1.006E11
Produzione:
Di seguito possiamo vedere l'output in console.