写在前面的话
在Java中有一个设计的原则“一切皆对象”,那么这样一来Java中的一些基本的数据类型,就完全不符合于这种设计思想,因为Java中的八种基本数据类型并不是引用数据类型,所以Java中为了解决这样的问题,引入了八种基本数据类型的包装类。
为八种基本数据类型提供包装类的作用
包装类的出现,能够使得基本数据类型和引用数据类型之间可以相互转换;
序号 | 基本数据类型 | 包装类 |
---|---|---|
1 | int | Integer |
2 | char | Character |
3 | float | Float |
4 | double | Double |
5 | boolean | Boolean |
6 | byte | Byte |
7 | short | Short |
8 | long | Long |
以上的八种包装类也是分为两种大的类型的:
· Number:Integer、Short、Long、Double、Float、Byte都是Number的直接子类,表示是一个数字。
· Object:Character、Boolean,Number都是Object的直接子类。
我们知道,基本数据类型存储在栈中,而类存储在堆中。当基本数据类型有了自己的包装类后,那么赋值就可以这么写:
Integer i = new Integer(10);
// 等价于 int i = 10;
这样对象名i就保存着地址存储在栈中,Interger类则存储在堆中。
变为包装类的好处
1,我们知道,对象可以作为接口传给方法;当变为包装类后,对象i也就可以传给一个方法:
Integer i = new Integer(10);
public void xxx(Object o){ … }
2,Integer还提供直接把字符串转换为数字的功能:
int a = Integer.parseInt(“100”);
装箱和拆箱操作
装箱和拆箱操作是我们使用包装类时常用的功能。
装箱:指如何把一个基本数据类型的值变成包装类。
拆箱:指从包装类中把值变为基本数据类型。
因为所有的数值型的包装类都是Number的子类,Number的类中定义了如下的操作方法,以下的全部方法都是进行拆箱的操作。
序号 | 方法 | 描述 |
---|---|---|
1 | public byte byteValue() | 用于Byte->byte |
2 | public abstract double doubleValue() | 用于Double->double |
3 | public abstract float floatValue() | 用于Float->float |
4 | public abstract int intValue() | 用于Integer->int |
5 | public abstract long longValue() | 用于Long->long |
6 | public short shortValue() | 用于Short->short |
// 手动装箱
Integer i = new integer(200);
// 手动拆箱
int a = i.intValue();
// 自动装箱
Integer j = 200;
// 自动拆箱
int b = j;
JDK1.5版本之后,手动变成了自动。
字符串转换
使用包装类还有一个很优秀的地方在于:可以将一个字符串变为指定的基本数据类型,此点一般在接收输入数据上使用较多。
在Integer类中提供了以下的操作方法:
public static int parseInt(String s) ;
将String变为int型数据
在Float类中提供了以下的操作方法:
public static float parseFloat(String s) ;
将String变为Float
在Boolean 类中提供了以下操作方法:
public static boolean parseBoolean(String s) ;
将String变为boolean
…
…
方法的可变参数
一个方法中定义完了参数,则在调用的时候必须传入与其一一对应的参数,但是在JDK 1.5之后提供了新的功能,可以根据需要自动传入任意个数的参数。
语法:
返回值类型 方法名称(数据类型…参数名称) {
//参数在方法内部,以数组的形式来接收
}
// int...nums:表示可变参数,可以传入0-n个数字
// 方法内部可变参数以数组作为载体体现
public static int sum(int... nums){
int n = 0;
for(int i=0; i<nums.length;i++){
n+=nums[i];
}
return n;
}
System.out.println(sum(1,2,3,4));
注意:可变参数只能出现在参数列表的最后。