字符串的类区别、自动扩容、深浅拷贝

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() 方法里面,重写克隆的逻辑,对克隆对象的内部引用变量再进行一次克隆。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值