Number 类
一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number 的子类。Number 类属于 java.lang 包。
1.Java为八种基本数据类型提供了对应的包装类:
这种由编译器特别支持的包装称为装箱。所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。
下面是一个使用 Integer 对象的实例:
public class Test{
public static void main(String args[]){
Integer x = 5;
x = x + 10;
System.out.println(x);
}
}
//以上实例编译运行结果如下:
15
当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。
2.
包装类
包装类主要提供两大类的方法:
将本类型和其他基本类型进行转换的方法;
将字符串和本类型及包装类互相转换的方法;
(1) 基本数据类型与包装类之间的转换
装箱:将基本数据类型转换成对应的包装类
① 使
用对应包装类的构造器
② 使用对应包装类的
静态方法 valueOf()
拆箱:将包装类转换成对应的基本数据类型
① 使用对应包装类的 xxxValue() xxx:对应的基本数据类型
(2) 自动装箱和自动拆箱(jdk1.5以后提供)
int a = 10;
Integer num = a; //自动装箱
int a1 = num; //自动拆箱
Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1 == num2); //true
Integer num3 = 130;
Integer num4 = 130;
System.out.println(num3 == num4);//false
原因:Integer 提供了一个小的缓存(-128~127),若要装箱的值在该取值范围内,则直接从缓存中取一个Integer实例,若超出了该取值范围,则重新 new Integer()。
(3) 基本数据类型、包装类 与 String之间进行转换
① 基本数据类型、包装类 转成 String :
【1】String str = a + "";
【2】使用对应包装类的静态方法 toString()
int a1=123;
Integer a2=456;
String s1=a1+"";
String s2 = a2.toString();
System.out.println(s1);
System.out.println(s2);
② String 转成基本数据类型、包装类 :
【1】使用对应包装类的构造器
【2】使用对应包装类的静态方法 valueOf()
【3】
使用对应包装类的静态方法 parseXxx() :
xx 指的是对应的基本数据类型
String str = "123";
try {
int b = Integer.valueOf(str);
} catch (NumberFormatException e) {
e.printStackTrace();
}
Math 类
Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();
1.常用的方法
double ceil(double d) : 返回不小于d的最小整数
double floor(double d): 返回不大于d的最大整数
int round(float f)接近f的int型(四舍五入)
long round(double d):返回最接近 : 返回最d的long型
double abs(double d):
double max(double d1, double d2) : 返回较大值
int min(int i1, int i2) : 返回较小值
double random() : 返回一个大于等于0.0并且小于1.0的随机数
2.实例
public class Test {
public static void main(String args[]){
double a = 12.81;// 定义一个double类型变量
int b = (int) a;//将double类型强制转换为int类型,去掉小数位
System.out.println("强制类型转换:" + b);
long c = Math.round(a);//调用round方法,进行四舍五入
System.out.println("四舍五入:"+ c);
double d = Math.floor(a);//调用floor方法,返回小于参数的最大整数
System.out.println("floor:" + d);
double e = Math.ceil(a);//调用ceil方法,返回大于参数的最小整数
System.out.println("ceil:"+ e);
double x = Math.random( );//调用random方法,产生[0,1)之间的随机数浮点数
System.out.println("随机数:"+ x);
int y = (int) (Math.random( ) * 99 );// 产生[0,99)之间的随机数
System.out.println("产生[0,99)之间的随机数:" + y);
}
}
//运行结果:
强制类型转换:12
四舍五入:13
floor:12.0
ceil:13.0
随机数:0.6264011687706469
产生[0,99)之间的随机数:76