`Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。
由于Java中的double类型使用64位存储一个数值,而有些处理器使用80位的浮点寄存器,但最终结果都要被截断位64位,这就可能会导致不同处理器运行浮点计算出现不一致的计算结果或者导致溢出的情况。
针对这种问题,可以使用strictfp关键字修饰类或方法,这样可以使被修饰的方法使用严格的浮点计算,这样便可以在不同平台上获得相同的结果。
计算时钟时使用( a + b ) % 12这个式子,当b小于0时,运算的结果可能为负数,这个时候我们可能会使用( ( a + b ) % 12 + 12 ) % 12 这种方式,十分的麻烦。
这种情况可以使用Math类中的 floorMod 方法,解决方法就变为了floorMod( a + b, 12)。
(当除数为负数时,floorMod会返回负数结果,但是结合实际场景,这种情况很少出现)
一般情况下,Java进行数学运算时,如果出现溢出等异常,使用运算符进行运算只会返回一个错误的结果而不做任何提醒。
这种情况下使用Math类中的addExact、subtractExact、multiplyExact等方法,可以将溢出等异常进行捕获并抛出,使得整数具有更好的运算安全性。
Java中可以使用 >>> 运算符来进行右移操作,并用0填充高位,即逻辑运算。