1、string stringBuffer strngBuilder 区别
可变性:string 中的vlaue值是final修饰的,是一个不可变的类,每一次修改string 的值的时候,都会产生一个新的对象。而stringBuffer 和strngBuilder 是一个可变类。字符串的变更不会产生新的对象。
线程安全性:string是一个不可变的类,所以它是线程安全的,stringbuffer也是安全的,因为他的每一个操作方法里面都有一个 synchronized一个同步关键字。stringbuilder不是线程安全的,所以在多线程环境下对字符串进行操作,应该使用stringbuffer。
性能:string是性能最低的。因为不可变,再做字符串拼接或者修改的时候,我们需要重新创建新的对象,以及分配内存。其次 stringbuffer 比 strngBuilder 性能更高。因为可变性字符串可以直接被修改。最后性能最高的是 strngBuilder ,因为它加了同步锁,会对性能产生影响,
存储:string存储在字符串常量池里面。 stringbuffer 和strngBuilder 是存储在堆内存空间
2、ArrayList 自动扩容
它是一个数组结构的存储容器,默认长度数组长度是10个,当在构建arraylist 对象时候,指定初始长度,随着在程序里面不断往ArrayList 里面添加数据,当添加的数据达到10个时候,arraylist里面就没有足够的容量去存储后续数据,这是会会它触发自动扩容
流程:创建一个新的数组,长度是原来长度的1.5倍。
使用arrays.copyof方法把老数组里面的数据拷贝到新的数组里面
扩容完成后 把需要添加的元素加入到新的数组里面
3、深拷贝、浅拷贝
他俩是用来描述对象或者对象数组,这种引用数据类型的一个复制场景的。
浅拷贝就是只复制一个对象的指针,而不复制这个对象本身。意味着两个引用指针指向被复制对象的同一块内存地址,
深拷贝就是完全创建一个一模一样的新的对象,新的对象和老对象之间,不共享任何内存,意味着对新对象的修改不会印象老对象的值。
无论深浅拷贝,都需要去通过实现Cloneable接口,并实现clone() 方法,然后在clone() 方法里面去实现 浅拷贝 或者深拷贝
实现深拷贝方法:通过序列化方式:把一个对象先序列化一遍,返回再通过反序列化回来,就会得到一个完整的新的对象,或者在clone() 方法里面,重写克隆的逻辑,对克隆对象的内部引用变量再进行一次克隆。
标签:里面,string,对象,深浅,数组,字符串,拷贝,strngBuilder From: https://blog.csdn.net/w12345ll/article/details/140096823