首先思考一个问题:为什么要存在 包装类?
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 class IntegerTest { public static void main(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---123 int类型的it1-------123 --------------------------------- 字符串类型的it2---456 int类型的it2-------456 --------------------------------- it3 == it4 ?----true it3.equals(it4)----true it5 == it6 ?----false it5.equals(it6)----true --------------------------------- it7 == it8 ?----false it7.equals(it8)----true
常用方法代码测试:
public class IntegerTest { public static void main(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