Java学习总结11——基础类库1(String相关类)

1.String类

  String类是Java中最常用的对象之一,下面分析下String对象。 

  String对象底层是一个fina类型的char数组,如下:  

private final char value[];

  1.由于 String本质上是fina类型的字符数组,因此String是不可变对象

   每次new一个String对象,或者在任何情况下给String赋值、做字符串拼接、运算,得到的都是一个新的对象。(不要和常量池混淆)

  2.由于java中的字符char是基于unicode编码(占2个字节),因此Java String是字节无关的

如果将String对象转换成字节,则需要指定编码,如

String s = "abc";
byte[] bs = s.getBytes("UTF-8");

如果不指定编码,则使用平台的默认编码。

同样,由字节转数组化成String对象需要指定编码,否则使用平台的默认编码。

2.StringBuffer类String类区别

StringBuffer类内部维护了一个可变的成员变量char[] value;因此是可变的。

StringBuffer优于String对象主要在于:字符串连接操作中StringBuffer的效率要比String高。

但是对于String的字符串拼接,即+操作,jvm会自动将String转化成StringBuffer以提升效率。

但以下情况最好使用StringBuffer:

String[] elem = ...;
String str = "";
for(int i = 0;i < elem.length;i++){
  str +=elem[i];
}

 

因为jvm会将该代码编译成:

</pre><pre>
 
String[] elem = ...;
String str = "";
for(int i = 0;i < elem.length;i++){
    StringBuffer sb = new StringBuffer(str);
        sb.append(elem[i]);
    str = sb.toString();
}

多次new StringBuffer对象,效率低下,应改为:

String[] elem = ...;
String str = "";
StringBuffer sb = new StringBuffer(str);
for(int i = 0;i < elem.length;i++){
    sb.append(elem[i]);
}
str = sb.toString();

 
3.StringBuffer类StringBuider类区别 

StringBuffer 字符串变量(线程安全),append等方法为synchronize方法
StringBuilder 字符串变量(非线程安全)。

在单线程中,做字符串操作时,StringBuilder性能高于StringBuffer。

对于三者使用的总结: 
1.如果要操作少量的数据用 = String 
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

参考:http://iluoxuan.iteye.com/blog/1622277

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值