我们知道java是面向对象的语言,其精髓之一是可以使用多态性,提高程序的灵活度。
但是java中有8个基本类 型:byte,short,int,long,float,double,char,boolean。它们是以值的形式存在于内存中,而不是对象。
它们不 是Object的子类,不能参与面向对象的开发。在java1.5版本以前以下的代码是不能通过的.
packagecom.souvc.api;publicclassTest {publicstaticvoidmain(String[] args) {
String str= "hello";
doSome(str);//可以,因为String是Object的子类inti = 1;//程序编译不通过,原因在于int不是Object的子类,不能使用多态性。doSome(i);
}publicstaticvoiddoSome(Object o) {//....}
}
问题出现的原因就是基本类型int没有继承关系,它不是Object的子类。所以,若想让基本类型以对象的形式存在,我们就需要定义一个类 Integer,然后用其实例来描述一个基本类型int。
这样的好处在于,我们使用对象来描述基本类型数据,而类又是继承自Object的。从而可以让基 本类型参与面向对象的开发。好在,像Integer这样的类不需要我们定义,因为java已经提供了8中基本类型对应的包装类。
注:java1.5版本后出现了自动拆装箱特性,上述代码可以正常编译通过。自动拆装箱我们后面会详细描述。
对于8个基本类型,java提供了他们相应的包装类:
基本类型 包装类
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
char java.lang.Character
boolean java.lang.Boolean
其中除了Character与Boolean的父类是Object之外,其余的都是继承自:java.lang.Number
Number是一个抽象类。本身不能实例化。Number 的子类必须提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法
比如:
abstract double doubleValue() 以double形式返回指定的数值
abstract int intValue() 以int形式返回指定的数值
abstract float floatValue() 以float形式返回指定的数值
剩下的抽象方法请参阅API文档:java.lang.Number 。
现在我们来学习一下如何在基本类型与包装类之间相互转换。
当我们需要将基本类型转换为包装类时,我们可以调用包装类的一个静态方法valueOf():
Integer i = Integer.valueOf(1);
Double d= Double.valueOf(1.1);
当我们需要将包装类转换为基本类型时,我们可以使用包装类的方法xxxValue()方法(这里不同的包装类方法名不完全一致,但都是以Value结尾):
Integer i =newInteger(1);intn =i.intValue();
Double d=newDouble(1.1);doubledn = d.doubleValue();
虽然我们可以通过上述的方法在基本类型与包装类之间相互转换。但是在实际编写代码时相对还是比较麻烦的。java在1.5版本后推出了一个新的特性:自动拆装箱。
以下代码在java1.4时编译不通过,但是在java1.5之后可以:
inti =newInteger(1);//可以自动将包装类转换为基本类型 自动拆箱Integer in = 1;//可以自动将基本类型转换为包装类 自动装箱
那么java是如何实现的自动拆装箱呢?
事实上JVM不支持该特性,自动拆装箱只是编译器在编译过程中的"预处理"操作。编译器在看到需要在包装类与基本类型之间转换时,会在编译为字节码时进行改变:
源代码中 编译后的字节码中
Integer a = 100 => Integer a = Integer.valueOf(100);
Integer b = 200 => Integer b = Integer.valueOf(200);
Integer c = a+b => Integer c = Integer.valueOf (a.intValue( ) + b.intValue( ));
double d = c => double d = c . doubleValue( );
2.1Integer类——整数类34
2.1.1构造方法——Integer类的构造方法34
2.1.2常量——Integer类的常量34
2.1.3bitCount方法——获取二进制补码中1的数量34
2.1.4byteValue方法——获取byte类型的值35
2.1.5compareTo方法——比较整数35
2.1.6decode方法——字符串解码为int类型35
2.1.7doubleValue方法——返回double数值36
2.1.8equals方法——判断整数对象相等36
2.1.9floatValue方法——获取float数值37
2.1.10getInteger方法——获取整数的系统属性值37
2.1.11hashCode方法——生成整数的哈希码39
2.1.12highestOneBit方法——获取整数二进制最高位1的索引39
2.1.13intValue()方法——获取int值40
2.1.14longValue方法——获取long值40
2.1.15lowestOneBit方法——获取整数二进制最低位1的索引41
2.1.16parseInt方法——将字符串解析为int值41
2.1.17reverse方法——反转整数二进制补码的位顺序43
2.1.18reverseBytes方法——反转整数字节的顺序44
2.1.19shortValue方法——获取short值44
2.1.20signum方法——获取整数符号44
2.1.21toBinaryString方法——生成整数的二进制字符串45
2.1.22toHexString方法——生成整数的十六进制字符串45
2.1.23toOctalString方法——生成整数的八进制字符串46
2.1.24toString方法——生成整数的十进制字符串47
2.1.25valueOf方法——创建Integer对象49
2.2Long类——长整型类50
2.2.1构造方法——Long类的构造方法51
2.2.2常量——Long类的常量51
2.2.3bitCount方法——获取二进制补码中1的数量51
2.2.4byteValue方法——获取byte值51
2.2.5compareTo方法——比较长整数52
2.2.6decode方法——字符串解码为long类型52
2.2.7doubleValue方法——返回double数值53
2.2.8equals方法——判断长整数对象相等53
2.2.9floatValue方法——获取float数值54
2.2.10getLong方法——获取长整数的系统属性值54
2.2.11hashCode方法——生成长整数的哈希码56
2.2.12highestOneBit方法——获取长整数二进制最高位1的索引56
2.2.13intValue()方法——获取int值57
2.2.14longValue方法——获取long值57
2.2.15lowestOneBit方法——获取长整数二进制最低位1的索引57
2.2.16parseLong方法——将字符串解析为long值58
2.2.17reverse方法——反转长整数二进制补码的位顺序60
2.2.18reverseBytes方法——反转长整数字节的顺序60
2.2.19shortValue方法——获取short值61
2.2.20signum方法——获取长整数符号61
2.2.21toBinaryString方法——生成长整数的二进制字符串61
2.2.22toHexString方法——生成长整数的十六进制字符串62
2.2.23toOctalString方法——生成长整数的八进制字符串62
2.2.24toString方法——生成长整数的十进制字符串63
2.2.25valueOf方法——创建Long对象65
2.3Short类——短整型类67
2.3.1构造方法——Short类的构造方法67
2.3.2常量——Short类的常量67
2.3.3compareTo方法——比较短整数67
2.3.4decode方法——字符串解码为short类型68
2.3.5doubleValue方法——返回double数值68
2.3.6equals方法——判断短整数对象相等68
2.3.7floatValue方法——获取float数值69
2.3.8hashCode方法——生成短整数的哈希码69
2.3.9intValue()方法——获取int值70
2.3.10longValue方法——获取long值70
2.3.11parseShort方法——将字符串解析为short值70
2.3.12reverseBytes方法——反转短整数字节的顺序72
2.3.13shortValue方法——获取short值72
2.3.14toString方法——生成短整数的十进制字符串73
2.3.15valueOf方法——创建Short对象73
2.4Boolean类——布尔类75
2.4.1构造方法——Boolean类的构造方法75
2.4.2常量——Boolean类的常量75
2.4.3booleanValue方法——获取boolean值76
2.4.4compareTo方法——比较布尔值76
2.4.5equals方法——判断相等77
2.4.6getBoolean方法——获取布尔类型的系统属性值77
2.4.7hashCode方法——生成布尔对象的哈希码78
2.4.8parseBoolean方法——将字符串解析成boolean值78
2.4.9toString方法——生成布尔值的字符串78
2.4.10valueOf方法——创建布尔对象79
2.5Byte类——字节对象80
2.5.1构造方法——Byte类的构造方法80
2.5.2常量——Byte类的常量80
2.5.3compareTo方法——比较字节对象80
2.5.4decode方法——将字符串解码为Byte值81
2.5.5doubleValue方法——获取double值82
2.5.6equals方法——判断字节相等82
2.5.7floatValue方法——获取float值83
2.5.8hashCode方法——生成字节对象的哈希码83
2.5.9intValue方法——获取int值83
2.5.10longValue方法——获取long值83
2.5.11parseByte方法——将字符串解析为byte值84
2.5.12shortValue方法——获取short值85
2.5.13toString方法——生成字节值的十进制字符串85
2.5.14valueOf方法——创建Byte对象86
2.6Character类——字符类88
2.6.1构造方法——Character类的构造方法88
2.6.2常量——Character类的常量88
2.6.3charCount方法——计算指定字符代码点的数量89
2.6.4charValue方法——获取char值89
2.6.5codePointAt方法——获取字符数组元素的代码点90
2.6.6codePointBefore方法——获取字符数组索引前一个元素的代码点91
2.6.7codePointCount方法——返回字符数组的子数组中代码点的数量93
2.6.8compareTo方法——比较字符对象94
2.6.9equals方法——判断字符对象相等95
2.6.10getNumericValue方法——返回字符表示的int值95
2.6.11getType方法——返回一个指示字符的常规类别的值97
2.6.12hashCode方法——生成字符对象的哈希码97
2.6.13isDefined方法——判断是否为Unicode字符98
2.6.14isDigit方法——判断是否为数字字符98
2.6.15isLetter方法——判断是否为字母字符99
2.6.16isLowerCase方法——判断是否为小写字符100
2.6.17isUpperCase方法——判断是否为大写字符100
2.6.18toLowerCase方法——转换为小写字符101
2.6.19toUpperCase方法——转换为大写字符101
2.7Double——双精度数字类102
2.7.1构造方法——Double类的构造方法102
2.7.2常量——Double类的常量102
2.7.3byteValue方法——获取byte值102
2.7.4compare方法——比较双精度数字对象103
2.7.5compareTo方法——比较两个Double对象103
2.7.6intValue方法——将此Double值以int形式返回104
2.7.7doubleToLongBits方法——返回指定浮点值的表示形式104
2.7.8doubleToRawLongBits方法——保留NaN值返回指定浮点值的表示形式105
2.7.9doubleValue方法——获取double值105
2.7.10equals方法——判断Double对象是否相等106
2.7.11floatValue方法——获取float值107
2.7.12hashCode方法——生成Double 对象的哈希码107
2.7.13isInfinite方法——判断Double值的大小是否是无穷大107
2.7.14isNaN方法——判断Double值是否是一个非数字值108
2.7.15longBitsToDouble方法——返回给定位表示形式的double值109
2.7.16longValue方法——获取long值110
2.7.17parseDouble方法——将字符串解析为double值110
2.7.18shortValue方法——获取short值110
2.7.19toHexString方法——生成双精度数字的十六进制字符串111
2.7.20toString方法——生成双精度数字的十进制字符串112
2.7.21valueOf方法——创建Double对象112
2.8Float——浮点类113
2.8.1构造方法——Float类的构造方法113
2.8.2常量——Float类的常量114
2.8.3byteValue方法——获取byte值114
2.8.4compare方法——比较Float对象114
2.8.5compareTo方法——比较两个Float对象所表示的数值115
2.8.6doubleValue方法——获取double值115
2.8.7equals方法——判断Double对象相等115
2.8.8floatToIntBits方法——返回浮点值的表示形式116
2.8.9floatToRawIntBits方法——保留非数字值返回指定浮点值的表示形式117
2.8.10floatValue方法——获取float值118
2.8.11hashCode方法——返回Float对象的哈希码118
2.8.12intBitsToFloat方法——返回指定位表示形式的float值118
2.8.13intValue方法——获取int值119
2.8.14isInfinite方法——判断float值的大小是否是无穷大120
2.8.15isNaN方法——判断Float值是否是一个非数字值120
2.8.16longValue方法——获取long值121
2.8.17parseFloat方法——将字符串解析成float值121
2.8.18shortValue方法——获取short值122
2.8.19toHexString方法——生成浮点数的十六进制字符串122
2.8.20toString方法——生成浮点数的十进制字符串123
2.8.21valueOf方法——创建浮点数对象124