JavaSE编程基础(三)

11.String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的

a、可变性:String类中使用字符数组保存字符串,private  final   char   value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串, char[] value,这两种对象都是可变的。

b、线程安全性:String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步       锁,所以是非线程安全的。

c、性能:每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer 每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用

 

StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

对于三者使用的总结:如果要操作少量的数据用 = String,单线程操作字符串缓冲区 下操作大量数据 = StringBuilder,多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

12.自动装箱与拆箱

a、装箱:将基本类型用它们对应的引用类型包装起来;   b、拆箱:将包装类型转换为基本数据类型;

13.int 和 Integer 有什么区别

Java      是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型wrapper class),int 的包装类就是 Integer, Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

14.Java 为每个原始类型提供了哪些包装类型:

原始类型: boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

15ArrayList、LinkedList、Vector 的区别。

ArrayList,Vector 底层是由数组实现LinkedList 底层是由双线链表实现,从底层的实现可以得出它们的性能问题, ArrayList,Vector 插入速度相对较慢,查询速度相对较快,而LinkedList 插入速度较快,而查询速度较慢。再者由于 Vevtor 使用了线程安全锁,所以ArrayList 的运行效率高于 Vector。

posted @ 2021-01-04 13:36  渡赢  阅读(45)  评论(0编辑  收藏  举报