Math类和Random类
Math类
Math类是数学操作类,提供了一系列用于数学运算的静态方法,包括求绝对值、三角函数等。Math类中有两个静态常量PI和E,分别代表数学常量π和e。
round()方法用于对某个小数进行四舍五入,此方法会将小数后面的数字全部忽略,返回一个int类型的数,而ceil()方法和floor()方法返回的都是double类型的数。
Random类
在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。在Random类中提供了两个构造方法。
Random的构造方法
第一个构造方法是无参的,通过它创建的Random实例对象每次使用的种子都是随机的,因此没个对象产生的随机数不同。如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子即可。
文件运行两次产生的随机数序列是不一样的。这是因为当创建Random的实例对象时,没有指定种子,系统会以当前时间戳作为种子,产生随机数。
两次运行结果一样当创建Random类的实例对象时,如果指定了相同的种子,则每个实例对象产生的随机数具有相同的序列。
Random类的常用方法
相当于Math()类的Random()方法而言,Random类提供了更多的方法来生成各种伪随机数,不仅可以生成整数类型的随机数,还可以生成浮点类型的随机数。
Random类的常用方法其中,Random类的nextDouble()方法返回的是0.0和1.0之间double类型的值,nextFloat()方法返回的是0.0和1.0之间float类型的值,nextInt(int n)返回的是0(包括)和指定值n(不包括)之间的值。
包装类
在Java中,很多类的方法都需要接收引用类型的对象,此时就无法将一个基本数据类型的值传入。为了解决这样的问题,JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象。在Java中,每种基本类型都有对应的包装类,具体如下表:
基本数据类型对应的包装类以上就是八种基本数据类型及其对应的包装类。其中除了Integer和Charactoer类,其他包装类的名称和基本数据类型的名称一致,只是类名的第一个字母需要大写。
包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念。其中,装箱是指将基本数据类型的值转为引用数据类型,反之,拆箱是指将引用数据类型的对象转为基本数据类型。
以上是int类型的包装类Integer
在创建integer对象时,将int类型的变量a作为参数传入,从而转为Integer类型。由于Object类是所有类的父类,可通过toString()方法将Integer的值以字符串的形式打印出来,需要注意的是此处的toString()方法是可以省略的。Integer类除了有Object类的所有方法外,还有一些特有的方法。
其中intValue()方法可以将Integer类型的值转为int类型,这个方法可以用来进行拆箱操作。
Integer对象通过调用intValue()方法,将Integer对象转为int类型,从而可以与int类型的变量a进行加法运算,最终将运算结果正确打印。
parseInt()方法parseInt()方法是一个静态方法,用于将一个字符串形式的数值转成int类型。
使用包装类时,需要注意以下几点:
①包装类都重写了Object类中的toString()方法,以字符串形式返回被包装的基本数据类型的值。
②除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类的对象,但参数字符串不能为null,而且字符串必须是可以解析为相应基本数据类型的数据,否则虽然可以编译通过,但运行时会报错。
Integer i=Integer.valueOf(" 123 ")//合法
Integer i=Intager.valueOf(" 12a ")//不合法
③除了Character外,包装类都有parseXxx(String s)的静态方法,将字符串转换成对应的基本数据类型。参数s不能为null,而且同样必须是可以解析成相应基本类型的数据,否则虽然编译会通过,但运行时会报错。
int i=Integer.parseInt(" 123 ");//合法
int i=Integer.parseInt(" intasc ");//不合法
在JDK5.0之前,数学运算表达式中的操作室必须是基本类型的,并且运行结果也是基本类型,包装类的基本类型时不允许进行混合数学运算的,如果想运算,必须要通过拆箱将包装类对象转为基本数据类型的值才行,具体事例如下:
int a=i;//合法
int b=a+1;//合法
Integer c=a+b;//不合法,编译报错
b=a+(new Integer(1));//不合法,编译报错
在JDK5.0版本中提供了自动拆箱和装箱技术,也就是自动进行基本数据类型和包装类之间的转换。
int num=20;
Integer number=num;//自动装箱
上面的代码就是自动装箱,相当于程序自动执行了语句“Integer number=new Integer(num)”
Integer number=new Integer(18);
int number2=number;//自动拆箱
上面的代码自动拆箱,相当于程序自动执行了语句“int number2=number.intValue()”。
正是因为自动拆箱装箱的技术,在JDK5.0版本后,基本数据类型可以进行混合数学运算,也可以将两个Integer类型进行数学运算。
网友评论