java-string不可变

  1. string相关
    1. String 不可变
    2. Stringbuffer 可变 线程安全,效率低
    3. Stringbuild 可变 线程不安全,效率高
  2. String不可变

//String 类是final修饰的类,一旦创建内容和长度不可以改变(是字符串本身不能改变,不是引用指向的字符串不能改变,不能混淆)
//String值不变验证
//1.结果true,在创建字符串时,会在常量池中查找是否存在相同的字符串,有则返回引用
//没有则创建,所以str str1 地址指向同一个字符串,因此地址值相等,TRUE
String str = "123";
String str1 = "123";
System.out.println(str==str1);//true
//2.通过new创建的string字符串,不是在常量池中,因此相同的字符串内容,并不是同一个地址值
String str2 = new String("123");
System.out.println(str==str2 );//false
String str3 = new String("456");
//再次验证,已经存在通过new的字符串,通过复制方式,获取到的引用不相同
String str4 = "456";
System.out.println(str3==str4);//flase

//3.结果111.说明字符串不可改变,str5给对应的引用复制222,要是可以改变,那么str6结果是222
String str5 = "111";
String str6 = "111";
str5 ="222";
System.out.println(str6); //111

  1. 三者之间区别
    1. 底层都是通过char[]数组实现大的
    2. String 一旦创建不可变,否则开辟新的空间, stringbuffer,stringbuilder 是可变的
    3. Stringbuffer 实现都是在synchronized中实现同步,线程安全,但是效率低,stringbuilder则没有,线程不安全,效率高
    4. 频繁使用字符串时,String不优先考虑使用,Stringbuilder在不考虑线程安全时候使用,考虑线程安全使用stringbuffer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值