JAVA关键字strictfp & transient 的作用
strictfp有什么作用?
答:关键字strictfp是strictfloatpoint的缩写,指的是精确浮点,它用来确保浮点数运算的准确性。JVM在执行浮点数运算时,如果没有指定strictfp关键字,此时计算结果可能会不精确,而且计算结果在不同平台或厂商的虚拟机上会有不同的结果,导致意想不到的错误。而一旦使用了strictfp来声明一个类、接口或者方法,那么在所声明的范围内,Java编译器以及运行环境会完全依照IEEE二进制浮点数算术标准(IEEE754)来执行,在这个关键字声明的范围内所有浮点数的计算都是精确的。需要注意的是,当一个类被strictfp修饰时,所有方法都会自动被strictfp修饰。因此,strictfp可以保证浮点数运算的精确性,而且在不同的硬件平台上会有一致的运行结果。
transient关键字的作用
`transient`关键字在Java中用于指示某些变量不应该被序列化。当对象实现`Serializable`接口并准备进行序列化时,通常所有非`transient`的属性都会被写入到序列化流中。使用`transient`修饰的变量则不会被序列化,这意味着它们不会被写入到文件中或在网络传输中发送,也不会在反序列化过程中被恢复。
具体来说,`transient`关键字的作用包括:
避免数据泄露:对于包含敏感信息的变量,如密码、会话令牌或加密密钥等,使用`transient`可以防止这些信息在序列化过程中被记录下来,从而保护数据安全。
提高性能:不序列化某些变量可以减少序列化过程所需的时间和空间,从而提高序列化和反序列化的性能。
优化存储空间:减少序列化的属性数量可以降低序列化后对象的大小,节省存储空间。
在使用场景中,`transient`通常用于修饰那些临时变量或敏感数据,确保它们在序列化时不会被记录。此外,对于那些不需要在序列化后传递给其他系统的字段,也可以使用`transient`来避免不必要的序列化过程