🦔常用工具类
2021-3-6
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 

Math

Math类就是用来进行数学计算的,它提供了大量的静态方法来实现数学计算
 
计算次方:
 
计算
 
计算 次方:
 
计算的对数:
三角函数:
Math还提供了几个数学常量:
生成一个随机数x,x的范围是0 <= x < 1
如果我们要生成一个区间在[MIN, MAX)的随机数,可以借助Math.random()实现,计算如下:
Java标准库还提供了一个StrictMath,它提供了和Math几乎一模一样的方法。区别在于,由于浮点数计算存在误差,不同的平台(例如x86和ARM)计算的结果可能不一致(指误差不同),因此,StrictMath保证所有平台计算结果都是完全相同的,而Math会尽量针对平台优化计算速度,所以,绝大多数情况下,使用Math就足够了。
 
 
 

Random

Random用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。
要生成一个随机数,可以使用nextInt()nextLong()nextFloat()nextDouble()
创建Random实例时,如果不给定种子,就使用系统当前时间戳作为种子,因此每次运行时种子不同,得到的伪随机数序列不同。
如果在创建Random实例时指定一个种子,就会得到完全确定的随机数序列:
前面使用的Math.random()实际上内部调用了Random类,所以它也是伪随机数,只是无法指定种子。
 
 

SecureRandom

有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的:
SecureRandom无法指定种子,它使用RNG(random number generator)算法。JDK的SecureRandom实际上有多种不同的底层实现,有的使用安全随机种子加上伪随机数算法来产生安全的随机数,有的使用真正的随机数生成器。实际使用的时候,可以优先获取高强度的安全随机数生成器,如果没有提供,再使用普通等级的安全随机数生成器:
SecureRandom的安全性是通过操作系统提供的安全的随机种子来生成随机数。这个种子是通过CPU的热噪声、读写磁盘的字节、网络流量等各种随机事件产生的“熵”。
在密码学中,安全的随机数非常重要。如果使用不安全的伪随机数,所有加密体系都将被攻破。因此,时刻牢记必须使用SecureRandom来产生安全的随机数。
需要使用安全随机数的时候,必须使用SecureRandom,绝不能使用Random!
 
  • Java
  • 记录类BigInteger和BigDecimal (1)
    目录