包装类继承结构图
1、集合类泛型只能是包装类;
// 编译报错 List<int> list1 = new ArrayList<>(); // 正常 List<Integer> list2 = new ArrayList<>();
2、成员变量的默认值;
private int status; //基本数据类型 默认为0 private Integer status; //包装类型 默认为null
基本数据类型的成员变量都有默认值,如以上代码 status 默认值为 0,因为代码编写的问题,在赋值过程中 ,没有进行处理null值,就给status赋值了,那样就可能会出现问题,为了避免这样问题出现,只能使用包装类 Integer,它的默认值为 null,所以就不会有默认值影响,也就省掉了去处理null的麻烦了.
3、方法参数允许定义空值;
private static void test1(int status){//不可以传null System.out.println(status); } private static void test1(Integer status){//可以传null System.out.println(status); }
看以上代码,方法参数定义的是基本数据类型 int,所以必须得传一个数字过来,不能传 null,很多场合我们希望是能传递 null 的,所以这种场合用包装类比较合适。
注意.包装类是对象.所以在使用==比较的是地址 如果需要比较值的话那么使用包装类中的,equals 用法和String中的equals一样,当然也是可以使用Objects.equals()的
所有包装类里的方法基本相同 ,所以下面案例只拿几种来演示
装箱:基本数据类型转换为包装类;
拆箱:包装类转换为基本数据类型。
//1.自动装箱 int t1=1; Integer t2=t1; //2.手动装箱 Integer t3=new Integer(t1); System.out.println("int类型t1="+t1); System.out.println("自动装箱,Integer类型对象t2="+t2); System.out.println("手动装箱,Integer类型t3="+t3); //1.自动拆箱 int t4=t2; //2.手动拆箱 //通过intValue()方法返回int值,还可以利用其他方法装换为其他类型 int t5=t2.intValue(); System.out.println("自动拆箱,int型t4="+t4); System.out.println("手动拆箱,int型t5="+t5);
通过包装类Integer.toString()–将整型转换为字符串;
通过Integer.parseInt()–将字符串转换为int类型;
通过valueOf()–把字符串转换为包装类然后自动拆箱
//基本数据类型转换为字符串 int t1=12; String t2=Integer.toString(t1); System.out.println("int转换为String:"+t2); //字符串转换为基本数据类型 //通过paerInt方法 将字符串转为int int t3=Integer.parseInt(t2); //通过valeOf,先把字符串转换为包装类然后通过自动拆箱 转换为int int t4=Integer.valueOf(t2); System.out.println("t3:"+t3); System.out.println("t4:"+t4);
Java为了提高拆装箱效率,在执行过程中提供了一个缓存区(对象池)【类似于常量数组】如果传入的参数是,-128 ~127 会直接去缓存查找数据,如果有久直接产生,如果没有就隐式调用new方法产生
Integer three=100; // 这时缓存区没有,就会构造一个 Integer four=100; //这时缓存区有,就会直接取 Integer five=200; //这里为200,超出了缓存区范围,所以就会隐式 new Integer(200)
Integer
和 Long
toBinaryString(int i) //转2进制 Integer.toHexString(int i) //转16进制 Integer.toOctalString(int i)//转 8进制