包装类,java中什么时候用包装类
首先思考一个问题:为什么要存在 包装类?
Java是语言一门纯面向对象的编程语言,万物皆对象!
如:
int num = 30; // int是基本数据类型
Person p = new Person( );
在某些特殊场合中,如集合中:集合要求放入的所有数据都必须是对象(即,引用类型)。
而对于基本类型的数据来说,这并不满足是对象的要求:因此不能直接将 基本数据类型的数据 放入到集合中。
为了能够放入该类数据,就要对这些基本数据类型进行对象化处理,于是需要借助 包装类。
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 类
Integer 类 (重点)
1. 概述:
java.lang.Integer类 被 final修饰,表示该类不能被继承。该类的内部包装了一个int类型的数据。
2. 常用方法:
Integer(int value) -采用参数指定的整数来构造对象
Integer(String str) -采用参数指定的字符串来构造对象
static int parseInt(String str) -用于将字符串转换为 int类型的整数。(静态方法使用 类名.的方式调用)
int intValue() -将Integer类型对象中的整数值返回
3. 装箱 和 拆箱 (从JDK1.5开始,支持自动装箱 和 自动拆箱 功能)
装箱就是指 从基本数据类型 转换成 引用数据类型; 如: int ===> Integer
拆箱就是指 从引用数据类型 转换成 基本用数据类型; 如:Integer ===> int
4. 自动装箱池
从JDK1.5开始,支持自动装箱 和 自动拆箱 功能,为了提高装箱的效率,Integer类的内部还提供了一个自动装箱池,
里面放好了 -128 ~ 127 之间的数据对象。当程序中需要对该范围中的数据进行装箱时,直接从装箱池中获取。超出该范围的数据,才需要创建新的对象。
代码演示:
public classIntegerTest {public static voidmain(String[] args) {//根据参数指定的int类型来构造Integer类型的对象//int ==> Integer类型 : 装箱 操作 (手动)
Integer it1 = new Integer(123);
System.out.println("字符串类型的it1---"+it1);//将Integer类型对象中的整数值返回//Integer类型 ==> int : 拆箱 操作 (手动)
int res =it1.intValue();
System.out.println("int类型的it1-------"+res);
System.out.println("---------------------------------");//int 数据类型 ==> Integer类型,
Integer it2 = 456; //这里Integer能够直接 接收一个 int数据类型:是因为jdk1.5之后实现了自动装箱功能
System.out.println("字符串类型的it2---"+it2);//Integer 数据类型 ==> int 类型,
res = it2; //
System.out.println("int类型的it2-------"+res);
System.out.println("---------------------------------");
Integer it3= 127;
Integer it4= 127;
Integer it5= new Integer(127);
Integer it6= new Integer(127);//此时 it3 ,it4 都是Integer类型
System.out.println("it3 == it4 ?----" +(it3 == it4)); //== 用于比较 引用类型时,比较的是对象的地址 127 在 [-128, 127]自动装箱的数据范围之内,所以127来自自动装箱池
System.out.println("it3.equals(it4)----"+(it3.equals(it4))); //Integer类重写了Object的equals()方法,用于比较两个对象的内容是否一致,it3,it4都是127//此时it5, it6 都Integer类型
System.out.println( "it5 == it6 ?----" +(it5 == it6)); //== 用于比较 引用类型时,比较的是对象的地址 it5 ,it6都是通过new出来的,是两个不同的对象。
System.out.println("it5.equals(it6)----"+(it5.equals(it6))); // //Integer类重写了Object的equals()方法,用于比较两个对象的内容是否一致,it3,it4都是127
System.out.println("---------------------------------");//同理 it7, it8 都Integer类型
Integer it7 = 128;
Integer it8= 128;
System.out.println("it7 == it8 ?----" +(it7 == it8)); //比较对象地址 但是,128不在自动装箱池的数据范围之内。
System.out.println("it7.equals(it8)----"+(it7.equals(it8))); //比较内容
}
}
结果;
字符串类型的it1---123int类型的it1-------123
---------------------------------字符串类型的it2---456int类型的it2-------456
---------------------------------it3== it4 ?----trueit3.equals(it4)----trueit5== it6 ?----falseit5.equals(it6)----true
---------------------------------it7== it8 ?----falseit7.equals(it8)----true
常用方法代码测试:
public classIntegerTest {public static voidmain(String[] args) {//使用参数指定的整数来构造对象
Integer it1 = new Integer(123);
System.out.println("自动调用toString()方法 打印it1 = "+it1); //自动调用toString()方法
System.out.println("获取包含的整数值: "+it1.intValue()); //获取包含的整数值 123//使用参数指定的字符串来构造对象
Integer it2 = new Integer("456");
System.out.println("自动调用toString()方法 打印it2 = "+it2); //自动调用toString()方法
System.out.println("获取包含的整数值: "+it2.intValue()); //获取包含的整数值值 456//将字符串转换为整数
int parseInt = Integer.parseInt("789");
System.out.println("将字符串转换为整数:"+parseInt);//将整数转换为 二进制形式 的字符串
String binaryString = Integer.toBinaryString(-1);
System.out.println("将整数转换为 二进制形式 的字符串: "+binaryString);// //将整数转换为 二进制形式 的字符串
String hexString = Integer.toHexString(-1);
System.out.println("将整数转换为 二进制形式 的字符串: "+hexString);
}
}
结果:
自动调用toString()方法 打印it1 = 123获取包含的整数值:123自动调用toString()方法 打印it2= 456获取包含的整数值:456将字符串转换为整数:789将整数转换为 二进制形式 的字符串:11111111111111111111111111111111将整数转换为 二进制形式 的字符串: ffffffff
http://www.dengb.com/Javabc/1376966.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/1376966.htmlTechArticle包装类,java中什么时候用包装类 首先思考一个问题:为什么要存在 包装类? Java是语言一门纯面向对象的编程语言,万物皆对象! 如:...