String StringBuilder Stringuffer

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

StringBuilder 字符串变量(非线程安全)



开始抄袭别人了



String这个类叫做常量字符串,构造长得像int i=0;

String str="hello",但他又是一个类,大概是在堆内存建立一个字符串对象"hello"

再在栈内存建立一个对象,叫str,指向“hello”,

如果你写str="world",它又建立一个"world",然后str指向world这个字符串,

所以理解这个常量的含义,真不能变了吗,再写一句 str=“anther means”;还是可以的

但是本质却是再建立一个对象,指向它。


所以频繁改动字符串不建议用String

再说说+

String str="a"+"b"+"c"

很简单吧。str的值abc

但是代价呢

  1.  String str = "I like";//---------1--------  
  2.         System.out.println(System.identityHashCode(str));  
  3.         str = str + "java";//--------2---------  
  4.         System.out.println(System.identityHashCode(str)); 
str还是str但是每一次等于,结果导致它指向的对象不一样了。说明你的+拼接字符串

其实还是要建立一个字符串对象,然后你的str指向它。消耗空间啊,这是空间上的性能分析


Stringbuffer 可变的字符串

StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");

字符串连接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.

这是时间上的性能分析,所以你如果分析String和StringBuffer的性能,千万别+,因为在jvm它会把他们自动转化了

那样你得出结论String效率差可能只是差一点点



StringBuilder 和buffer差不多,但是线程不安全,所以如果你确保就一个线程,用builder那效率更是要快一点







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值