Day014 包装类:装箱,封箱

Java 包装类i

java中8种基本类型又对应准备了8种包装类,8种包装类属于引用数据类型,父类是Object

image-20210428112238456

  • 8种基本数据类型不够用

所以sun公司又提供了对应的8种包装类型

8 种数据类型对应的包装类型名

image-20210428112527456

以上八种包装类中,重点以Integer为主

  • 八种包装类中其中6个都是数字对应的包装类。他们的父类都是Number,可以先研究Number中的公共方法:

Number是一个抽象类,无法实例化对象

image-20210428114445557

Integer i = new Integer(123);
//基本数据类型   (转换为)-》引用数据类型   (装箱)

float f= i.floatValue();
System.out.println(f);//123.0
//将引用数据类型   (转换为)——》基本数据类型   (拆箱)

image-20210428114846847

关于Integer类的构造方法,有两个:

Integer(int)

Integer(String)

image-20210428115111254

 

出现横线表示已 过时了;

在jdk1.5之后,支持自动拆箱。和自动装箱

面试题

  • String是为啥不可变得: 我看过源代码

String类中有一个byte数组,并且这个byte数组是使用final修饰的

因为数组一旦创建长度是不可变得,并且被final修饰的引用一旦指向某个对象之后,不可再指向其他对象,所以String是不可变的。

  • Stringbuilder、stringbuffer 为什么是课可变的呢?

    我看过源代码!Stringbuffer、StringBuilder内部实际上是一个byte【】数组

    这个byte【】数组没有被final修饰,stirngBuffer\StringBuilder的初始化容量我记得应该是16.当存满之后会进行扩容,底层调用了数组拷贝的方法

    System.arraycopy()……是这样扩容的,所以StringBuilder、StringBuffer

    适合于使用字符串的频繁拼接操作

     

  • 字符串不可变得意思

是指双引号里面的字符串对象一旦创建不可变

放在字符串常量池

 

自动装箱,自动拆箱

自动装箱:基本数据类型自动转换成包装类

自动拆箱:包装类自动转换成基本数据类型

 

有了自动拆箱之后,Number类中的方法就用不着了

image-20210428121232816

Integer z =1000;  等同于   Integer z = new Integer(1000)保存的是内存地址指向对象
   // == 比较的是对象的内存地址,
   
   ==这个运算符不会触发自动拆箱机制,(只有+-*/等运算的时候才会)
   
System.out.println(z + 1);
//“+”;两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱,将z转换成基本数据类型
z是一个引用

自动拆箱,自动装箱的好处就是为了方便编程。

  • ==这个运算符不会触发自动拆箱机制,(只有+-*/等运算的时候才会)

java中为了提高程序的执行效率。将{-128到127}之间所有的包装对象提前创建好放到一个方法区的“整数型常量池”当中。目的是只要用这个区间的数据不需要再new,直接从整数型常量池中取出来。

 

 

Integer中非常重要的面试题

 

image-20210428122656812

image-20210428122715003

静态代码块 在类加载时候执行

Integer类加载的时候会初始化整数型常量 池 :256个对象

 

池:cache,就是缓存机制


  • 缓存优点:效率高

  • 缓存缺点:耗费内存


缓存机制要重视,大型项目中的重要优化手段是:cache缓存机制

 

总结之前学过的经典异常

image-20210428123705303

  • parseInt

image-20210428124538201

 

p617

 

posted @ 2021-04-28 12:50  各人blanknote  阅读(59)  评论(0)    收藏  举报