Java中的包装类
Java它是一种面向对象的语言,Java中的类把方法和数据连接到一起,构成了自包含式的处理单元。但是Java中不能定义基本类型对象,为了能够将基本类型当做对象来处理,Java为每种基本类型都提供了包装类,如int型的包装类Integer,boolean型的包装类Boolean,这样就可以将这些基本类型转换为对象,并且能调用一些方法了。从基本类型转换为对应的包装类,叫做装箱。从包装类转换为对应的基本类型,叫做拆箱。
1、所有的包装类
基本类型及对应的包装类如下表:
以图结构来说明:
数字类型的包装类继承自Number类,Number类、Boolean类、Character类都是继承自Object类。
2、Integer类
Integer类是int基本型对应的包装类,该类在对象中包装了一个int的值。Integer类是Number类型的子类。api文档中说明如下:
提供的常量如下:
构造方法如下:
提供的方法如下:
常用的方法说明如下:
- byteValue():以byte类型返回该Integer值。
- compareTo(Integer res):与另一个Integer类型对比,相等返回0,大于返回1,小于返回-1。
- equals(Object obj):比较是否相等,返回布尔值。
- intValue():以int型返回此Integer对象,即拆箱。
- shortValue():以short型返回此Integer对象。
- toString():返回一个表示此Integer值的String对象。
- valueOf(String str):将String字符串转换为Integer类型返回,即装箱。如果str不是纯数字的,会报错。
- parseInt(String str):返回与str中的数字等价的int值,str要为纯数字。
- parseInt(String str,int radix):将radix进制的字符串以十进制的int返回。
- toBinaryString(int i):返回i的二进制字符串表示。
- toDctalString(int i):返回i的八进制字符串表示。
- toHexString(int i):返回i的十六进制字符串表示。
以下代码进行说明:
public static void main(String[] args) {
int age = 25;
String height = "183";
// 构造方法的参数接受int型和纯数字的String类型
Integer obj = new Integer(age);
System.out.println(obj);
Integer obj2 = new Integer(height);
System.out.println(obj2);
// 测试4个常量属性
System.out.println("int存储的最大值是:" + Integer.MAX_VALUE);
System.out.println("int存储的最小值是:" + Integer.MIN_VALUE);
System.out.println("int类型的字节数是:" + Integer.SIZE + "字节");
System.out.println("int类型的比特数是:" + Integer.BYTES + "比特");
System.out.println(obj.compareTo(25));
System.out.println(obj.compareTo(24));
System.out.println(obj.compareTo(26));
// intValue拆箱
int num = obj.intValue();
System.out.println(num);
// valueOf装箱,返回一个Integer类型
Integer obj3 = Integer.valueOf(num);
System.out.println("obj3=" + obj3);
System.out.println("二进制1011对应的十进制为:" + Integer.valueOf("1011", 2));
System.out.println("八进制1011对应的十进制为:" + Integer.valueOf("1011", 8));
System.out.println("十六进制1011对应的十进制为:" + Integer.valueOf("1011", 16));
// parseInt返回一个int型
int num2 = Integer.parseInt("20");
System.out.println("num2=" + num2);
System.out.println("二进制1011对应的十进制为:" + Integer.parseInt("1011", 2));
System.out.println("八进制1011对应的十进制为:" + Integer.parseInt("1011", 8));
System.out.println("十六进制1011对应的十进制为:" + Integer.parseInt("1011", 16));
// 返回数值的进制字符串
String str_2 = Integer.toBinaryString(16);
String str_8 = Integer.toOctalString(16);
String str_16 = Integer.toHexString(16);
System.out.println("16的二进制为:" + str_2);
System.out.println("16的八进制为:" + str_8);
System.out.println("16的十六进制为:" + str_16);
//简单的求最大值、最小值、求和方法
System.out.println("最大值为:" + Integer.max(25, 20));
System.out.println("最小值为:" + Integer.min(25, 20));
System.out.println("和值为:" + Integer.sum(25, 20));
}
执行,控制台:
其他的数值包装类型:Byte、Short、Long、Float、Double参考Integer类型,基本相同。
3、Character类型
Character类在对象中包含了一个char基本型的值。api说明如下:
构造方法是唯一的:
提供的方法:
常用几种方法的说明:
- charValue():返回此Character对象的char值。
- compareTo(Character c):比较在字母表中的顺序,相同返回0。在前面返回-1,后面返回1。
- equals(Object obj):比较是否相等。
- toUpperCase(Char ch):将字符转为大写。
- toLowerCase(Char ch):将字符转为小写。
- toString():返回char型的字符串值。
- charValue():返回此Character的char值。
- isUpperCase(char ch):判断字符是否为大写。
- isLowerCase(char ch):判断字符是否为小写。
以下通过一个例子来说明:
给定一个数组,统计数组中字母、大写字母、小写字母、数字、空格的数量。
public static void main(String[] args) {
char[] chs = {'a', 'C', '8', '0', '6', 'D', ' ', 'F', ' ', 'y', '5', 'p', ' ', 'T', '*', '(' };
countNum(chs);
}
// 定义一个方法,统计字母、大写字母、小写字母、数字、空格的个数
private static void countNum(char[] chs) {
// 计数器
int letter = 0, upLetter = 0, lowLetter = 0, digit = 0, whiteSpace = 0, others = 0;
for (int i = 0; i < chs.length; i++) {
// 统计字母
if (Character.isLetter(chs[i])) {
letter++;
// 确定是字母后进一步确定大小写
if (Character.isUpperCase(chs[i])) {// 统计大写字母
upLetter++;
}
if (Character.isLowerCase(chs[i])) {// 统计小写字母
lowLetter++;
}
} else if (Character.isDigit(chs[i])) {// 统计数字
digit++;
} else if (Character.isWhitespace(chs[i])) {// 统计空格
whiteSpace++;
} else {// 其他
others++;
}
}
System.out.println("该数组的长度为:" + chs.length);
System.out.println("字母一共有:" + letter + "个");
System.out.println("大写字母一共有:" + upLetter + "个");
System.out.println("小写字母一共有:" + lowLetter + "个");
System.out.println("数字一共有:" + digit + "个");
System.out.println("空格一共有:" + whiteSpace + "个");
System.out.println("其他类型字符一共有:" + others + "个");
}
控制台:
给定一个数组,数组中只有大小写字母,将大写字母转为小写,小写字母转为大写。
public static void main(String[] args) {
char[] chs = {'I', 'a', 'm', 'a', 'C', 'h', 'i', 'n', 'e', 's', 'e' };
System.out.println("转换前的内容如下:");
for (int i = 0; i < chs.length; i++) {
System.out.print(chs[i] + "\t");
}
System.out.println();
char[] res = transfer(chs);
System.out.println("转换后的内容如下:");
for (int i = 0; i < res.length; i++) {
System.out.print(res[i] + "\t");
}
}
// 定义一个方法,进行大小写转换
private static char[] transfer(char[] chs) {
for (int i = 0; i < chs.length; i++) {
if (Character.isUpperCase(chs[i])) {
chs[i] = Character.toLowerCase(chs[i]);
} else if (Character.isLowerCase(chs[i])) {
chs[i] = Character.toUpperCase(chs[i]);
}
}
return chs;
}
执行,控制台:
其他的一些东西:
public static void main(String[] args) {
char ch = '鄢';
Character obj = new Character(ch);
Character obj2 = Character.valueOf(ch);
System.out.println("obj=" + obj);
System.out.println("obj2=" + obj2);
char res = obj.charValue();
System.out.println("res=" + res);
System.out.println("是否为Unicode字符?" + Character.isDefined(res));
System.out.println("对应的ASCII值为:" + (int) res);
Character obj3 = new Character('F');
System.out.println(obj3.compareTo('F'));
System.out.println(obj3.compareTo('E'));
System.out.println(obj3.compareTo('G'));
System.out.println(obj3.toString());
}
控制台:
4、Number类型
Number类是一个抽象类,是数值类型包装类的直接父类。api文档说明如下:
以上的方法都是抽象方法,相应的子类中其实都重写了。