Java是面向对象的编程语言,但它包含了8种基本数据类型。这8种数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量、方法可以被调用。
    这8种数据类型带来了一定的方便性,例如可以进行简单、有效的常规数据处理。但在某些时候,基本数据类型会有一些制约,例如所有引用类型变量都继承了Object类,都可以当成Object类型变量使用。但基本数据类型的变量就不可以。
    为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题,Java提供了包装类的概念,为8种基本数据类型分别定义了相应的引用类型,并称之为基本数据的包装类
    包装类分别为:Byte,Short,Integer,Long,Character,Float,Double,Boolean
    除了int和char有点例外之外,其他基本数据类型对应的包装类都是将其首字母大写即可。
    在JDK1.5以前,把基本数据类型变量变成包装类需要通过对应包装类的构造器来实现。
    但是从JDK1.5之后这种繁琐就消除了,JDK1.5提供自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能
    所谓自动装箱,就是可以把一个基本类型变量直接赋给对应包装类变量,或者赋给Object变量(Object是所有类的父类,子类可以直接赋给父类变量);自动拆箱则相反,允许把包装类对象直接赋给一个对应的仅类型变变量
    除此之外,包装类还可实现基本类型变量和字符串之间的转换。
    把字符串类型的值转换为基本类型的值有两种方式。
    ①利用包装类提供的parseXxx(String s)静态方法(除了Character之外所有包装类都提供了该方法)。
    ②利用包装类提供的Xxx(String s)构造器。
    String类提供了多个重载valueOf()方法,用于将基本类型转换成字符串
    如果希望把基本类型变量转换成字符串,还有一种更简单的方法:将基本类型变量和一个字符串进行“+”连接运算,系统会自动把基本类型变量转换成字符串。
    注意:虽然包装类型的变量是引用数据类型,但包装类的实例可以与基本数值类型的值进行比较,这种比较时可以直接取出包装类实例所包装的数值来进行比较的。
    需要注意的是Integer,系统是把一个-128~127之间的整数自动装箱成Integer对象,并放入了一个名为cache的数组中缓存起来。所以如果是把一个-128~127之间的整数自动装箱成一个Integer对象时,这个对象实际直接指向对应的数组元素,因此-128~127之间的同一个整数自动装箱成Integer实例时,永远是引用cache数组的同一个数组元素,所以它们的地址都相等;但如果把一个不在-128~127范围内的整数自动装箱成Integer对象时,系统总是创建一个新的Integer对象,此时地址就不相同了。

    Java的数据类型分为三大类,即布尔型、字符型和数值型,而其中数值型又分为整型和浮点型;相对于数据类型,Java的变量类型为布尔型boolean;字符型char;整型byte、short、int、long;浮点型float、double。其中四种整型变量和两种浮点型变量分别对应于不同的精度和范围。此外,我们还经常用到两种类变量,即String和Date。

    一、 整型、实型、字符型bai变量中的相互转换
    在Java中整型,实型,字符型被视为同一类数据,但是级别有所不同,转换时要注意低级变量能够直接转换为高级变量,例如,下面的语句能够在Java中直接通过:byte b;int i=b;而将高级变量转换为低级变量时,情况会复杂一些,您能够使用强制类型转换.即您必须采用下面这种语句格式:int i;byte b=(byte)i;
    能够想象,这种转换肯定可能会导致溢出或精度的下降,因此并不推荐使用这种转换.

    二、Java的包装类
    在讨论其他变量类型之间的相互转换时,需要了解一下Java的包装类,所谓包装类,就是能够直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,会大量使用这些包装类。Java共有六个包装类,分别是Boolean、Character、Integer、Long、Float和Double,从字面上就能够看出分别对应于 boolean、char、int、long、float和double。而String和Date本身就是类。所以也就不存在什么包装类的概念了。

    三、简单类型变量和包装类之间的相互转换
    简单类型的变量转换为相应的包装类,能够利用包装类的构造函数.即:

    Boolean(booleanvalue),Character(charvalue),Integer(intvalue),Long(longvalue),Float(floatvalue),Double(doublevalue)

    而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据.利用这种方法,也能够实现不同数值型变量间的转换.

    四、String类和其他数据类型的相互转换
    对于上面的这些包装类,除了Character以外,都有可以直接使用字符串参数的构造函数,这也就使得我们将String类转换为这些数据类型变得相当之简单,即:

    Boolean(String s),Integer(String s),Long(String s),Float(String s),Double(String s)
    而将String类转换为Date类也能够使用这样的构造函数:Date(String s)
    字符型变量,事实上String类能够理解为一个char型数组,所以charAt(int index)能够得到String类中某一位置上的字符,toCharArray()更能够将整个String类转换成一个char的数组.
    对于任何的包装类都存在一个名为toString()的方法能够将其转换成对应的String类,而对于整型类和长整型类,还能够使用toBinaryString(int i),toHexString(int i),toOctalString(int i)分别以二进制,十六进制和八进制的形式进行到String类的转换。

    五、将字符型直接做为数值转换为其它数据类型
    将字符型变量转换为数值型变量实际上有两种对应关系,在我们在第一部分所说的那种转换中,实际上是将其转换成对应的ASCII码,但是我们有时还需要另一种转换关系,例如,‘1’就是指的数值1,而不是其ASCII码,对于这种转换,我们可以使用Character的getNumericValue(char ch)方法。

    六、Date类与其它数据类型的相互转换
    整型和Date类之间并不存在直接的对应关系,只是你可以使用int型为分别表示年、月、日、时、分、秒,这样就在两者之间建立了一个对应关系,在作这种转换时,你可以使用Date类构造函数的三种形式:
    Date(int year, int month, int date):以int型表示年、月、日
    Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、时、分
    Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、时、分、秒
    在长整型和Date类之间有一个很有趣的对应关系,就是将一个时间表示为距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数。对于这种对应关系,Date类也有其相应的构造函数:Date(long date)
    获取Date类中的年、月、日、时、分、秒以及星期你可以使用Date类的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以将其理解为将Date类转换成int。
    而Date类的getTime()方法可以得到我们前面所说的一个时间对应的长整型数,与包装类一样,Date类也有一个toString()方法可以将其转换为String类。