一、Number封装类
Java内置了基本数据类型(boolean、char、byte、short、int、long、float、double),但是我们在编码更多的是使用基础数据类型封装类的对象、而不是内置数据类型。
Java中对内置数据类型封装了封装类,包含在java.lang包。
Number是一个抽象类,如下封装类是Number类的子类:
1) Boolean
2) Byte
3) Short
4) Integer
5) Long
6) Float
7) Double
举例:
Integer i = 10;
i = i + 1;
封箱(包)与拆箱(包):
Number封装类的对象也可以 像 基础数据类型 一样直接采用运算符进行运算,也可以进行 基本数据类型 和 Number封装类对象之间相互赋值,也可以进行基本数据类型和Number封装类之间混合运算。在这些操作中,Java自动完成装箱和拆箱。这种语言特性一般叫作自动装箱(autoboxing)
(1)当基本数据类型被转换成对接的封装类对象时,编译器会对内置基本类型装箱成封装类。
(2)相似的,编译器也可以把一个对象拆解成内置数据类型,称之为拆箱。
如上例子:
(1)当 i 被赋值时,由于 i 是一个对象,所以编译器对 i 进行装箱。
(2)然后,为了给 i 进行加运算,编译器需要对 i 进行拆箱。
如:
Integer i = 0; // 把int类型字面量0装箱到Integer对象中
Number n = 0.0f; // 把float类型字面量装箱到Float对象中,然后放大转换成Number类型
Integer i = 1; // 这是装箱转换
int j = i++; // i在这里拆箱 i++;拆箱i,递增,再装箱
Integer k = i + 2; // 拆箱i,再装箱两数之和
i = null; j = i; // 这次拆箱抛出NullPointerException异常 (原因是 i 没用引用的对象了,无法拆箱)
Jave中基本数据类型的属性 以 常量方式定义在封装类中,可以通过如下方式获取这些基本数据类型的属性。如:以Integer为例,获取属性如下:
Integer.SIZE //获取int类型占用字节低效
Integer.MIN_VALUE //获取int类型最小值
Integer.MAX_VALUE //获取int类型最大值
Float、Double常用的常量包含:MIN_VALUE、MAX_VALUE、NEGATIVE_INFINITY、POSITIVE_INFINITY和NaN。方法如:Flaot.isNaN(),Double.isNaN()。
二、Number封装类常用的方法
1) xxxValue()
把number对象 转换为 内置数据类型 返回。byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubuleValue()。样例:
Integer i = 5;
float f = i.floatValue();
2) compareTo()
public int compareTo( NumberSubClass referenceName )
referenceName:可以是一个 Byte、Double、Integer、Float、Long或Short类型的参数。
返回值:相等则,返回0;小于参数,则返回-1;大于参数,则返回1。样例:
Integer i = 5;
Float f = 5.43;
int ret1 = i.compareTo(f);
int ret2 = i.compareTo(4);
3) equals()
public boolean equals(Object o)
o:任何对象。
Number 对象不为 Null,且与方法的 参数类型与数值 都相等 返回 True,否则返回 False。样例:
Integer i = 5;
Short a = 5;
System.out.println(i.equals(a));
4) toString()
String toString() //对象方法
static String toString(int i) //类方法
返回一个字符串表示的 Number 对象值。
样例:
Integer a = 100;
System.out.println(a.toString());
System.out.println(Integer.toString(100));
除此以外,封装类还提供了把数字转换“指定进制”的字符串的方法,如:
Integer.toBinaryString(int i);
Integer.toHexString(int i);
Integer.toOctalString(int i);
Double.toHexString(int i);
5) valueOf()
static Integer valueOf(int i)
static Integer valueOf(String s)
static Integer valueOf(String s, int radix)
返回 给定参数的原生 Number 对象值,也支持Double等其他基础封装类对象。
i:整数值。
s:Integer类型对象的字符串。
radix:解析s字符串时的使用的基数,即进制。
样例:
Integer a = Integer.valueOf(100);
Integer b = Integer.valueOf(“99”);
Integer b = Integer.valueOf(“1ABD”, 16);//16机制的1ABD
Double d = Double.valueOf(“2.15143”);
6) parseInt()
static int parseInt(String s)
static int parseInt(String s, int radix)
将字符串参数返回为基础数据类型。也支持double等其他基础封装类对象。
样例:
int a = Integer.parseInt(“100”);
int b = Integer.parseInt(“444”, 8);//8机制的444
double d = Double.parseInt (“2.15143”);