当前位置:网站首页 > Java基础 > 正文

java 基础运算



文章目录

    • 运算符与表达式
      • 运算符
        • 算术运算符
        • 赋值运算符
        • 比较运算符
        • 逻辑运算符
        • 位运算符
        • 三目运算符
        • instanceof
        • 运算顺序
      • 表达式
        • 正则表达式
        • Lambda表达式
    • 控制流语句
      • if-else语句
      • switch语句
      • for语句
      • do-while和while语句
    • 参数传递
    • 浮点类精度问题
    • BigDecimal
      • 基本用法
      • 舍入规则
      • scale属性
      • 比较大小
    • Math
      • ceil和floor
      • random
      • round

运算符与表达式

运算符

运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。按其功能来分,可以有算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符、位运算符和其他运算符。

算术运算符
运算符名称用法描述备注示例+加法相加运算符两侧的值-减法左操作数减去右操作数*乘法相乘操作符两侧的值/除法左操作数除以右操作数右操作数不能为0%取余左操作数除以右操作数的余数++自增操作数的值增加1–自减操作数的值减少1

关于取余,如果被取余的数小于取余的数,那取余的结果就是被除数,例如,、;如果被取余的数等于取余的数,结果是0,例如,;如果取余数是1,结果是0,例如,。

当使用随机数生成器产生的结果时,取余运算可将结果限制在上限为操作数最大值减1的范围。例如:n是随机数,那么就是中的一个数。无论n是多大的数,只能是之间的一个数,利用这一特性,可以应用在数据库分库、分表等。

对于自增和自减,需要特别留意的是和运算符可以前置、后置,都是合法的语句,如和都是合法的,上面这两种写法其最终的结果都是是变量a的值加1了,但是它们之间也是有区别的。其区别是:表达是会先将a的值自增1,然后在使用变量a,而表达式是先使用了a的值,然后再让a的值自增1。也就是说在一些表达式,使用和使用得到的结果时不一样的,例如:

 

和两个运算符只能作用于变量,而不能作用于表达式,例如:

 
赋值运算符
运算符名称用法描述示例=赋值将右操作数的值赋给左侧操作数+=加等于把左操作数和右操作数相加赋值给左操作数-=减等于把左操作数和右操作数相减赋值给左操作数*=乘等于把左操作数和右操作数相乘赋值给左操作数/=除等于把左操作数和右操作数相除赋值给左操作数%=模等于把左操作数和右操作数取模后赋值给左操作数<<=左位移等于把左操作数和右操作数进行左移运算后赋值给左操作数>>=右位移等于把左操作数和右操作数进行右移运算后赋值给左操作数&=按位与等于把左操作数和右操作数进行按位与运算后赋值给左操作数|=按位或等于把左操作数和右操作数进行按位或运算后赋值给左操作数^=异或等于把左操作数和右操作数进行按位异或运算后赋值给左操作数

在进行复合赋值运算时,Java会自动进行类型转换。例如,如果左操作数是一个较小的数据类型,而右操作数是一个较大的数据类型,则右操作数会被自动转换为左操作数的类型,然后进行运算。

 

复合赋值运算符是原子操作,即它们是一个完整的、不可分割的操作,不会被中断或其他线程干扰。对于数值型数据,特别是整数类型,需要注意复合赋值运算符可能导致的溢出问题。

 
比较运算符

比较运算符也称为关系运算符,用于展示两个操作数之间的关系。使用比较运算符表达式的最终结果为型,也就是其结果只有两个和。

运算符名称用法描述示例==双等号检查两个操作数的值是否相等!=不等号检查两个操作数的值是否不相等>大于检查左操作数的值是否大于右操作数<小于检查左操作数的值是否小于右操作数>=大于等于检查左操作数的值是否大于或等于右操作数<=小于等于检查左操作数的值是否小于或等于右操作数
逻辑运算符
运算符名称用法描述示例&&逻辑与当且仅当两个操作数都为真时,条件为真||逻辑或如果两个操作数任何一个为真时,条件为真!逻辑非用来反转操作数的逻辑状态,条件取反

运算符,运算顺序是从左到右计算,运算规则是如果两个操作数都是真,则返回,否则返回。但是当判定到第一个操作数为时,其结果必定为,这时候就不再会判定第二个操作数了。这种特性可以在复杂条件语句中提高效率,并可以避免不必要的计算。

 

在使用逻辑运算符时,特别是在复杂的条件逻辑中,尽量保证逻辑表达式的意图清晰,建议使用括号明确运算顺序。

位运算符

位运算符在追求代码效率和编写底层应用时,使用的比较多,在企业Java开发一般用到的较少。

运算符名称用法描述示例&按位与如果相对应位都是1,则结果为1,否则为0|按位或如果相对应位都是0,则结果为0,否则为1^按位异或如果相对应位值相同,则结果为0,否则为1~按位取反翻转操作数的每一位,即0变成1,1变成0<<左移左操作数按位左移右操作数指定的位数>>右移左操作数按位右移右操作数指定的位数>>>无符号右移左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充

一些小技巧:

  • :右移几位就是相当于除以2的几次幂;
  • :左移几位就是相当于乘以2的几次幂;
  • :当b为2的n次方时,有如下替换公式:;

位运算符只能对整数型(、、、)和字符型数据()进行操作。因为位运算符是以运算单位的,所以想要弄明白位运算符,就要先弄明白二进制的表示方法。

以下示例用十进制的1和2进行运算,1用二进制表示为,2用二进制表示为,为了更好的理解位运算,下面我会详细解析:

  • :如果相对应位都是1,则结果为1,否则为0;
     
  • :如果相对应位都是 0,则结果为 0,否则为 1;
     
  • :如果相对应位值相同,则结果为0,否则为1;
     
  • :翻转操作数的每一位,即0变成1,1变成0;
     
  • :左操作数按位左移右操作数指定的位数,如1左移两位:
     
  • :左操作数按位右移右操作数指定的位数;(正数右移高位补0,负数右移高位补1)
    1右移两位:
     负一右移两位:
     
  • :左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充;(无符号右移,无论是正数还是负数,高位通通补0)
    1无符号右移两位:
     负一无符号右移两位&java 基础运算#xff1a;
     
三目运算符

该运算符有3个操作数,其功能是对表达式条件进行判断,根据判断结果是或者两种情况赋予赋予不同的返回值。

该运算符的主要是决定哪个值应该赋值给变量。在某些情况下,可以发现三目运算符和作用是相同的,可以完全替代。三目运算符可以使代码更加简洁和可读,特别是在简单的条件赋值或返回语句中,但应该尽量避免过多的嵌套三目运算符,以免降低代码的可读性。

 

那么三目运算符与到底哪有啥不同?要探究这个原因,需要看JVM是对三目运算符怎么处理的。用命令,分别把和三目运算符相关代码进行反编译:

 
 
 
 

通过查阅《Java虚拟机指令集》,在参照上面反编译的字节码反编译的内容,可以看到JVM对上边的代码进行了什么处理。通过比较两次反编译后的代码可以得出一个结论,即三目运算符与执行的命令几乎没有差异。但是对于实际开发来说三目运算符的可读性相对不如代码,所以在常见的编码中,三目运算符更倾向于简单的语句的替代。

instanceof

是一个双目运算符,该关键字的作用是判断左边的对象是不是右边类的实例,并返回一个值。可以用来检查对象的类型,包括检查对象是否是其直接类的实例或者其父类的实例,或实现了某个接口。在实际开发中经常用于在运行时动态确定对象的类型,从而决定如何处理对象或执行特定的逻辑。

 
运算顺序

Java语言中运算符的优先级共分为14级,其中1级最高,14级最低,在同一个表达式中运算符优先级高的先执行。Java中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符、三目运算符例外,是从右向左运算的。

优先级运算符结合性1()、[]从左向右2!、+、-、~、++、–从右向左3*、/、%从左向右4+、-从左向右5«、»、>>>从左向6<、<=、>、>=、instanceof从左向右7==、!=从左向右8&从左向右10|从左向右11&&从左向右12||从左向右13?:从右向左14=、+=、-=、*=、/=、&=、|=、^=、~=、<<=、>>=、>>>=从右向左

在实际开发中,不要把一个表达式写得过于复杂。如果一个表达式过于复杂,则会影响代码可读性,建议把它分成几步来完成。不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号来控制表达式的执行顺序,这样能提高代码的可读性和减少歧义。

表达式

在Java中表达式通常是以分号结尾的一段代码。

 

表达式是由运算符和运算对象组成的,表达式可以定义为一组变量、常量、运算符等符号的组合,其结构形成一个计算值的过程,换句话说,表达式是用来计算值的一种编程结构。变量的赋值与计算都离不开表达式,表达式的运算依赖于变量、常量和运算符。

正则表达式

正则表达式,又称规则表达式,英语:,在代码中常简写为、或。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,在众多语言中都可以支持正则表达式,如、、、、等。

正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。例如:在其他语言中, 表示,在正则表达式中插入一个普通的(字面上的)反斜杠。在Java中, 表示,插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。所以,在其他的语言中,一个反斜杠就足以具有转义的作用,而在Java中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在Java的正则表达式中,两个 代表其他语言中的一个,这也就是为什么表示一位数字的正则表达式是 ,而表示一个普通的反斜杠是 。

正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的文字模式,例如:。在Java中主要是使用正则表达式处理字符串,Java从jdk1.4开始提供了一个包来处理正则表达式。主要使用包中类,类来处理字符串,使用正则表达式示例:

 

总的来说,正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。正则表达式的灵活性、逻辑性和功能性非常的强,可以迅速地用极简单的方式达到字符串的复杂控制,但是对于刚接触的人来说比较晦涩难懂。以下是常用正则表达式:

描述正则表达式是否为数字是否为n位数数字是否为m-n位的数字是否输入至少n位的数字是否为整数是否为负整数是否为正整数是否为汉字是否为邮箱是否为域名是否为URL是否为手机号码`^(13[0-9]是否为固话号码`^($$d{3,4}-)是否为身份证号码`^(d{15}是否为日期(YYYY-MM-DD)是否为时间(HH:MM:SS)是否为十六进制颜色码`^#?([a-fA-F0-9]{6}是否包含HTML标签`<(“[^”]*"是否为金额(带小数点的数字)是否为UUID
Lambda表达式

表达式是Java 8引入的一项重要功能,用于简化实现接口中单个抽象方法的类的写法,使代码更加简洁和易读。表达式可以看作是匿名函数,可以在没有声明其所属类的情况下创建函数对象。

表达式的基本语法如下:

 
  • 参数列表:为参数,类似于方法的参数;
  • 箭头符号:,用于分隔参数和方法体;
  • 方法体:为方法体,方法体可以是一个表达式或一个代码块;

表达式通常用于替代匿名类:

 

在开发中最常用的就是集合中流,举例:

 

Java 8引入了许多函数式接口,这些接口在包中定义,常用的函数式接口包括:

  • :接口表示接受一个输入参数并且不返回结果的操作,它通常用于对单个参数执行某种操作;
     
     
  • :接口表示提供一个结果的供应商,无输入参数,它通常用于提供或生成某种值;
     
     
  • :接口表示接受一个输入参数并返回一个结果的函数,它通常用于将输入转换为输出;
     
     
  • :接口表示一个接受单个参数并返回布尔值的断言,它通常用于条件判断;
     
     

在表达式中,方法的引用也发生了变化,使用操作符,主要有四种类型:

  • 引用静态方法;
     
  • 引用实例方法;
     
  • 引用对象的实例方法;
     
  • 引用构造函数;
     

控制流语句

if-else语句

语句是最基本的控制语句,它只有在为的时候才会执行特定的代码。

 

语句后面可以跟语句,当为时,语句体将被执行。

 

语句后面可以跟语句:

 

switch语句

语句在项目开发中比较常用,可以和实现相同的功能,但使用语句可以提高代码的可读性。

语句用于判断一个变量是否等于一系列值中的某个值,每个值称为一个分支。语句还可以包含一个分支,当没有任何分支的值与变量值相等时,分支的代码将被执行。

 

当变量的值与语句的值相等时,那么语句之后的语句开始执行,直到语句出现,才会跳出语句。如果没有语句出现,程序会继续执行下一条语句,直到出现语句,需要注意的是,分支不需要语句。

 

语句中的变量类型可以是,、、、或者,从Java7开始,可以在条件判断语句中使用对象。不支持,是因为的设计初衷是对那些只有少数的几个值进行等值判断,如果值过于复杂,那么还是用比较合适。

for语句

for语句提供了一种紧凑的方法来遍历一系列值。因为它反复循环直到满足特定条件,程序员经常将其称为“for循环”。for循环执行的次数是在执行前就确定的,for语句的一般形式可以表示为:

 

for循环的三个表达式是可选的,例如可以这样创建一个无限循环:

 

语句是Java5的新特征之一,在遍历数组、集合方面,为开发人员提供了极大的方便。

 

在for循环中,语句用来结束当前循环,并进入下一次循环。注意仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。

 

语句作用是跳出循环,主要用在循环语句或者语句中。

 

如果存在多层循环,要注意只能跳出一层循环,而不能结束多层循环。

 

如果想要跳出多层循环,可以用以下方式,当然也可以用跳两次循环。

 

也可以用上面的这种方式。

 

语句表示从当前方法退出,控制流返回到调用方法的地方。

 

语句有两种形式,一种返回值,另一种不返回值。要返回一个值,只需将值(或计算该值的表达式)放在关键字之后即可,像这样。

do-while和while语句

语句对表达式进行计算,表达式必须返回一个布尔值。如果表达式的计算结果为,语句将执行块中的语句。语句继续测试表达式并执行其块,直到表达式的计算结果为。

 

循环和循环相似。对于循环如果条件一开始不满足,循环体可能一次也不会执行,而循环它会先执行一次循环体,然后再检查条件。

 

循环、循环和for循环是Java中的三种常见循环结构。在大多数情况下,性能差异可以忽略不计,代码的清晰和易读性才是关键。

  • 循环:用于在满足条件前可能不执行循环体的情况;
  • 循环:用于至少需要执行一次循环体的情况;
  • for循环:用于已知循环次数或需要固定迭代次数的情况;

参数传递

对于基本数据类型(如int、char、float等),值传递意味着传递的是变量的副本,是值传递。如果是对象,那就是引用传递,这个理解是错误的。

形式参数与实际参数:

  • 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数;
  • 实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”;

举个例子:

 

值传递与引用传递:

  • 值传递: 是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数;
  • 引用传递: 是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数;
值传递引用传递区别传参时会创建副本传参数不创建副本描述方法中无法修改原始对象方法中可以修改原始对象

举个例子,如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容。

 

然后有人就说Java传递对象类型参数是引用传递,其实这一点在官方《Java™教程》中有相关的描述。

Passing Reference Data Type Arguments.
Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object’s fields can be changed in the method, if they have the proper access level.

文档大意:传递引用数据类型参数,引用数据类型参数(如对象)也按值传递给方法。这意味着当方法返回时,传入的引用仍然引用与之前相同的对象,但是如果对象的字段具有适当的访问级别,则可以在方法中更改它们的值。

所以在Java中的参数传递确实是值传递,但在处理对象引用时,表现出的行为可能让人误以为是引用传递。举个例子来更好的理解:

 

值传递和引用传递最大的区别是,传递的过程中有没有复制出一个副本来,如果是传递副本,那就是值传递,否则就是引用传递。在Java中,其实是通过值传递实现的参数传递,只不过对于Java对象的传递,传递的内容是对象的引用的副本。所以Java的参数是以值传递的形式传入方法中,而不是引用传递。Java对象的传递,是通过复制的方式把引用关系传递了。如果我们没有改引用关系,而是找到引用的地址,把里面的内容改了,是会对调用方有影响的,因为大家指向的是同一个共享地址。

浮点类精度问题

在Java中,使用浮点类型进行计算会造成精度丢失。例如:

 

那么为什么浮点类型会存在精度精度丢失问题呢?因为Java的浮点类型在计算机中是用二进制来存储的,也就是小数在转二进制的时候出现了精度丢失。

小数如何转二进制?将待转的数字乘以2,取出整数部分作为二进制表示的第1位,然后再将小数部分乘以2,将得到的整数部分作为二进制表示的第2位,以此类推,直到小数部分为0。特殊情况,如果小数部分出现循环,无法停止,则用有限的二进制位无法准确表示一个小数,这也是在编程语言中表示小数会出现误差的原因。例如,0.1转二进制:

 

因为计算机中存储一个浮点类型所用的位数是有限的,所以遇到无限循环的小数,只能选择在某个精度进行保存。由于计算机中保存的小数其实是十进制的小数的近似值,并不是准确值,所以,千万不要在代码中使用浮点数来表示金额等重要的指标。

那怎么解决浮点精度丢失问题?Java中的类提供了精确的十进制数学运算,避免了浮点数精度丢失的问题。
能够保证精度主要因为它基于十进制表示和算术运算,避免了二进制浮点数在表示和计算小数时可能出现的舍入误差和精度问题。

BigDecimal

Java在包中提供的API类,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量可以处理16位有效数,在实际应用中,需要对更大或者更小的数进行运算和处理,所以需要用到。

Java中提供了大数字(超过16位有效位)的操作类,即类和类,用于高精度计算。其中类是针对大整数的处理类,而类则是针对大小数的处理类。类的实现用到了类,不同的是加入了小数的概念。

基本用法

一共有两种方法可以进行初始化赋值,构造器初始化赋值,方法初始化赋值。在使用中参数为类型的构造器时,发现存储结果并不准确。

 

找到Java API中的相关描述:

The results of this constructor can be somewhat unpredictable.
One might assume that writing {@code new BigDecimal(0.1)} in Java creates a {@code BigDecimal} which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625.
This is because 0.1 cannot be represented exactly as a {@code double} (or, for that matter, as a binary fraction of any finite length).
Thus, the value that is being passedin to the constructor is not exactly equal to 0.1, appearances notwithstanding.

The {@code String} constructor, on the other hand, is perfectly predictable: writing {@code new BigDecimal(“0.1”)} creates a {@code BigDecimal} which is exactly equal to 0.1, as one would expect. Therefore, it is generally recommended that the {@linkplain #BigDecimal(String)String constructor} be used in preference to this one.

大概意思是说,用作为参数的构造函数,无法精确构造一个对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用对象作为参数传入的构造函数能精确的构造出一个对象。

 

所以要想获得精确的结果,要使用的字符串构造函数,不要使用参数的构造函数。

所创建的是对象,我们不能使用传统的等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是的对象,构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

 

另外说一下如何转换其他类型。类提供了,,等将对象转换成对应类型的方法:

 

舍入规则

在使用除法的时候如果两个数字,除不尽而又没有设置精确小数位和舍入模式,就会报错:

 
 

为了防止报错,我们可以这样写:

 

在类方法中参数为舍入规则,如果不指定默认采用则四舍五入方式。

 

类在进行数值运算时,可以通过指定不同的舍入规则来控制计算结果的精确度和舍入方式。舍入规则由枚举类定义,Java 提供了几种常见的舍入模式,每种模式都适用于不同的应用场景和需求,我们在使用除法的时候,最好要指定精确小数位和舍入模式。

  • :向正无穷方向舍入,即始终向远离零的方向舍入。例如,对 使用 模式舍入结果为 。
  • :向零方向舍入,即截断小数部分。例如,对 使用 模式舍入结果为 。
  • :向正无穷方向舍入,如果是正数则表现和 一样,如果是负数则表现和 一样。例如,对 使用 模式舍入结果为 ;对 使用 模式舍入结果为 。
  • :向负无穷方向舍入,如果是正数则表现和 一样,如果是负数则表现和 一样。例如,对 使用 模式舍入结果为 ;对 使用 模式舍入结果为 。
  • :四舍五入,当舍弃部分 >= 0.5 时,舍入行为同 ;否则,舍入行为同 。例如,对 使用 模式舍入结果为 ;对 使用 模式舍入结果为 。
  • :四舍五入,当舍弃部分 > 0.5 时,舍入行为同 ;否则,舍入行为同 。例如,对 使用 模式舍入结果为 ;对 使用 模式舍入结果为 。
  • :银行家舍入法,当舍弃部分等于 0.5 时,舍入行为同 ;否则,舍入行为同 。例如,对 使用 模式舍入结果为 ;对 使用 模式舍入结果为 。
  • :不需要舍入,如果计算结果需要舍入,则抛出 异常。

scale属性

对象中字段属性,指的是小数点后面的位数,比如,对于值 123.45,是 2。

可以增加或减少的小数位数。当增加小数位数时,新增加的位数会被填充为零。当减少小数位数时,多余的位数会被舍去,并根据指定的舍入模式进行舍入。

 

方法用于设置对象的,并且可以指定舍入模式。在设置新的时,如果不指定舍入模式且新的小于当前,则会抛出异常。

 
 

比较大小

使用进行比较操作需要特别注意,因为是用于精确计算的数据类型,不能像基本数据类型一样直接使用比较操作符,如 来比较。可以用的方法来进行比较。这里要注意,方法会比较数值和精度是否完全相同,即使两个对象表示的是相同的数值但精度不同,也会返回。

 

可以看到和数值是相等的,而方法返回的却是。看一下中重写的的源码:

 

文档中有这么一段描述:

objects equal only if they are equal in value and scale. thus 2.0 is not equal to 2.00 when compared by this method

大意:对象只有在和相等时才相等。因此,用本方法比较时,2.0不等于2.00。

所以不要用方法来比较对象,因为它的方法会比较,如果不一样,它会返回。如果需要比较数值相等,不考虑精度,可以使用方法进行比较,并判断返回的结果是否为0。

 

Math

,该类和Java中的运算息息相关。类是一个工具类,被修饰,构造方法是私有的,大部分方法都被修饰。

基本用法:

 

ceil和floor

方法的功能是向上取整。译为“天花板”,顾名思义就是对操作数取顶,就是取大于a的最小整数。需要注意的是它的返回值不是类型,而是类型。

 

方法的功能是向下取整。译为“地板”,顾名思义是对操作数取底。
,就会取小于a的最大整数。它的返回值类型与一致,也是类型。

 

一般情况下,的值正好是的值。

 

特殊情况:

  • 如果参数值已经等于一个数学整数,则结果与参数相同。
     
  • 如果参数是NaN或无穷大或正零或负零,则结果与参数相同。
     
  • 如果实参值小于零但大于-1.0,则结果为负零。
     

random

方法是 Java 中用于生成伪随机数的基本方法之一。它返回一个类型的随机数,范围在,包括0.0但不包括1.0。

 

由于方法生成的是之间的随机数,可以通过数学运算将其转换为不同范围的随机数。

 

通过源码可以看到,底层是调用了类中方法。

 

也就是说以下代码执行的逻辑是相同的:

 

类位于包下,此类的实例用于生成伪随机数流。之所以称之为伪随机,是因为真正意义上的随机数(或者称为随机事件)在某次产生过程中是按照实验过程表现的分布概率随机产生的,其结果是不可预测,不可见的。而计算机中的随机函数是按照一定的算法模拟产生的,其结果是确定的,可见的。我们认为这样产生的数据不是真正意义上的随机数,因而称之为伪随机。

该类提供了两种构造方法,无参构造底层调用的也是有参构造。将作为参数传递。如果使用无参构造,默认的值为。

 

要注意的是用有参构造创建对象,如果随机种子相同,不管执行多少次,最后结果都是相同的。

 

round

方法用于对浮点数进行四舍五入,并返回最接近的整数。

 

一般情况,方法用于对浮点数进行四舍五入,并返回最接近的整数。特殊情况:

  • 如果参数是NaN,结果是0;NaN表示非数值,例如:0.0/0结果为NAN,负数的平方根结果也为NAN;
  • 如果参数是负无穷大或小于或等于,结果为;
  • 如果参数是正无穷大或大于或等于,结果为;

                            

  • 上一篇: java 框架基础知识
  • 下一篇: java哪些基础类
  • 版权声明


    相关文章:

  • java 框架基础知识2024-10-15 16:50:01
  • java基础唐亮2024-10-15 16:50:01
  • java基础的歌曲大全2024-10-15 16:50:01
  • java基础知识296讲解2024-10-15 16:50:01
  • java基础中的标识符2024-10-15 16:50:01
  • java哪些基础类2024-10-15 16:50:01
  • java集合类基础框架2024-10-15 16:50:01
  • java基础随机数2024-10-15 16:50:01
  • java基础篇类和对象2024-10-15 16:50:01
  • java基础字符2024-10-15 16:50:01