Java基础

String,StringBuffer,StringBuilder

String字符串常量

StringBuffer字符串常量(线程安全)

StringBuilder字符串常量(非线程安全,使用场景单线程)

底层都实现了CharSequence类,但处理机制不同

  • String是不可改变的量,也就是创建之后就不可修改了
  • StringBuffer是一个可变字符串序列,与Stirng一样,在内存中都是保存在一个有序的字符串序列(Char数组),不同的是StringBuffer的值都是可变的
  • StringBuilder与StringBuffer一样都是可变字符串序列,不同的是StringBuilder是线程不安全的,StringBuffer是线程安全的

使用场景

String:在字符串不经常变化的场景使用,如常量的定义,少量变量的运算

StringBuffer:在频繁的进行变量运算(如拼接,替换,删除)使用,并且运行在多线程环境,如xml解析,http参数解析和封装

StringBuilder:在频繁的进行变量运算(如拼接,替换,删除)使用,并且运行在单线程环境,如sql拼接,json封装等

有些特定场景下String要比StringBuffer快

String str = "This "+"is "+ "a "+"test";
StringBuffer strBuffer = new StringBuffer("This").append("is").append("a").append("test");

这样的情况下Stirng生成对象要比StringBuffer快的多

eqaul和==区别

==比较两个对象的时候,检查的是两个对象的内存地址是否相同

equal默认和==一样,比较的是地址,但是eqaul被重载之后,比较的就是对象的value,String类就重写了这个方法

String特例:

String s1 = "abd";

String s2 = "abd";

System.out.print(s1==s2)  -> true

这是因为Stirng在创建表达式(非new方式)的时候,会先在Stirng缓冲池中寻找相同值的对象

s1先被放在缓冲池,再创建s2的时候程序找到了相同值的s1,直接引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值