为什么使用包装类
Java虽然是面向对象的编程语言,但是在里面包含了8种基本数据类型,这8个基本数据类型不支持面向对象的编程机制。
这些基本数据类型的数据不具备“对象”的特性,例如没有属性、没有方法可以被调用。这8种基本数据类型带来了一定的方便之处,例如可以进行简单、有效的常规数据处理。
但在某些时候,在使用基本数据类型时会有一些制约,例如所有引用类型的变量都继承了 Object类,都可以当成Object 类型变量来使用。但是基本数据类型的变量就不可以,如果有个万法需要用到Object类型的参数,但实际需要的值却是诸如数字3之类的数值,这可能就比较难以处理。
为了解决8个基本数据类型的变量不能当成Object奚型变量使用的这一问题,在Java中引入了包装类,通过包装类可以为8个基本数据类型分别定义相应的引用类型,这被称为基本数据类型的包装类。
包装类类型
Java库在java.lang包中提供了八个类来表示八种基本类型中的每一种。
这些类称为包装类,因为它们在对象中包装原始值。
下表列出了原始类型及其相应的包装类。
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
方法
所有包装类都是不可变的。它们提供了两种方法来创建它们的对象:
- 使用构造函数
- 使用valueOf()工厂方法
除了Character之外,每个包装类都提供至少两个构造函数:一个采用对应基本类型的值,另一个采用String。
Character类只提供一个接受char的构造函数。
以下代码创建一些包装类的对象:
public class Main {
public static void staticMethod() {
// Creates an Integer object from an int
Integer intObj1 = new Integer(100);
// Creates an Integer object from a String
Integer intObj2 = new Integer("1969");
// Creates a Double object from a double
Double doubleObj1 = new Double(10.45);
// Creates a Double object from a String
Double doubleObj2 = new Double("234.60");
// Creates a Character object from a char
Character charObj1 = new Character("A");
// Creates a Boolean object from a boolean
Boolean booleanObj1 = new Boolean(true);
// Creates Boolean objects from Strings
Boolean booleanTrue = new Boolean("true");
Boolean booleanFalse = new Boolean("false");
}
}
valueOf()
创建包装类对象的另一种方法是使用它们的valueOf()方法。
valueOf()方法是静态的。
下面的代码使用它们的valueOf()方法创建一些包装器类的对象:
public class Main {
public static void staticMethod() {
Integer intObj1 = Integer.valueOf(100);
Integer intObj2 = Integer.valueOf("2014");
Double doubleObj1 = Double.valueOf(10.45);
Double doubleObj2 = Double.valueOf("234.56");
Character charObj1 = Character.valueOf("A");
}
}
实例文件baozhuang.java
public class baozhuang
{
public static void main(String[] args)
{
boolean bl = true;
//通过构造器把b1基本类型变量包装成包装类对象
Boolean blObj = new Boolean(bl);
int it = 5;
//通过构造器把it基本类型变量包装成包装类对象
Integer itObj = new Integer(it);
//把一个字符串转换成Float对象
Float fl = new Float("1.23");
//把一个字符串转换成Boolean对象
Boolean bObj = new Boolean("trUe");
System.out.print("---------" + bObj);
//下面会引发java.lang.NumberFormatException异常
//Long lObj = new Long("ddd");
//取出Boolean对象里的boolean变量
boolean bb = bObj.booleanValue();
//取出Integer对象里的int变量
int i = itObj.intValue();
//取出Float对象里的float变量
float f = fl.floatValue();
}
}
在上面的实例代码中,演示了如何扣基本类型变量转换成对应包装类对象,以及如何把一个字符串包装成包装类对象的过程。
在上面程序中分别可以把把e,5等基本类型变量包装成包装类对象。
并且通过向包装类构造器里传人一个字符串参数,分别利用“4.56”“false”等字符串来创建包装类对象。
其中一行代码试图把字符串“ddd”换成Long 类型变量,所以编译时没有问题,但是在运行时会引发 java.lang.NumberFormat
Exception 异常.