Java中的strictfp关键字
strictfp是一个修饰符,代表严格的浮点数,它没有在Java的基本版本中引入,因为它是在Java版本 1.2 中引入的。它在Java中用于限制浮点计算并确保在对浮点变量执行操作时在每个平台上获得相同的结果。
浮点计算依赖于平台,即当类文件在不同平台(16/32/64 位处理器)上运行时,会实现不同的输出(浮点值)。为了解决这类问题,在 JDK 1.2 版本中引入了 strictfp 关键字,遵循 IEEE 754 浮点计算标准。
Note: strictfp modifier is used with classes, interfaces, and methods only but is not applicable to apply with variables as illustrated below:
图 1:类的关键字使用
strictfp class Test {
// All concrete methods here are implicitly strictfp.
}
图 2:接口的关键字使用
strictfp interface Test {
// All methods here becomes implicitly
// strictfp when used during inheritance.
}
class Car {
// strictfp applied on a concrete method
strictfp void calculateSpeed(){}
}
图 3:变量的关键字使用
strictfp interface Test {
double sum();
// Compile-time error here
strictfp double mul();
}
从上面的插图可以得出一些结论,如下所示:
- 当使用 strictfp 修饰符声明类或接口时,类/接口中声明的所有方法以及类中声明的所有嵌套类型都隐式为 strictfp。
- strictfp不能与抽象方法一起使用。但是,它可以与抽象类/接口一起使用。
- 由于接口的方法是隐式抽象的,因此 strictfp 不能与接口内的任何方法一起使用。
例子
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());
}
}
输出: