我是架构师-常用类型-String,StringBuffer,StringBuilder
2012-04-09 12:47
441 查看
这是个被说烂了的话题,我在这里走个流水账,仍然希望能对大家有所帮助。
String:
1. 字符串是常量;
2. 它们的值在创建之后不能更改;
3. 因为 String 对象是不可变的,所以可以共享;
4. Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持(String的”+”与“+=”是java中仅有的两个重载过的操作符,java程序员不允许重载任何操作符);
5. String 表示一个 UTF-16 格式的字符串,其中的增补字符 由代理项对 表示;
6. String解析成StringBuilder(编译器自作主张,源代码看不到)。
方法:
用到了正则表达式:
注意这个方法没有用正则表达式:
1.6增加了几个方法
关于字符编码问题,小提一下:
中文编码问题一直会伴随大家,在String这里粗略提一下,希望在以后有时间专门对字符讲解
StringBuffer/StringBuilder
简而言之:都继承了AbstractStringBuilder,但是StringBuffer在方法都做了线程安全(synchronized)。
以实例名StringBuilder su = new StringBuilder();为例:
1. 初始分配空间是16,此后到达16后增加空间为:(su.length()+1)*2;
2. su.append(x) 和 su.insert(su.length(), x) 具有相同的效果,但insert可在su中插入字符,而且更改字符串生成器(借用jdk翻译)
3 trimToSize() 尝试减少用于字符序列的存储空间。
举例:
我们曾经用StringBuilder做了日志记录行为,用枚举做级别配置,不妨试试自己写个 高效的log4j.
就写这些东西,小结:
1. 单线程之下,就用StringBuilder,考虑线程安全,再用StringBuffer
2. String的“+”号会把字符串变成常量,反复执行已经被优化,比StringBuilder快
3. 正则表达式会慢,但是如果不是高性能要求,用起来也很方便。
4. 考虑接触一下CharSet和Format,Pattern这些类,灵活玩转String.
String:
1. 字符串是常量;
2. 它们的值在创建之后不能更改;
3. 因为 String 对象是不可变的,所以可以共享;
4. Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持(String的”+”与“+=”是java中仅有的两个重载过的操作符,java程序员不允许重载任何操作符);
5. String 表示一个 UTF-16 格式的字符串,其中的增补字符 由代理项对 表示;
6. String解析成StringBuilder(编译器自作主张,源代码看不到)。
方法:
用到了正则表达式:
matches(String regex) | 告知此字符串是否匹配给定的正则表达式 |
replaceFirst(String regex, String replacement) | 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串 |
replaceAll(String regex, String replacement) | 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
replace(CharSequence target, CharSequence replacement) | 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
split(String regex, int limit) | 根据匹配给定的正则表达式来拆分此字符串。 |
split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 | 采用了 new String(…) |
String(byte[] bytes, int offset, int length,Charset charset) | 通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。 |
String(byte[] bytes, Charset charset) | 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。 |
isEmpty() | 当且仅当 length() 为 0 时返回 true。 |
getBytes(Charset charset) | 使用给定的charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 |
String[] encodes = {"ISO-8859-1","utf-8","gbk","utf-16"}; String[] decodes= encodes; public void testGetBytes(){ String s = "你好51CTO"; testByteString(s); printlns("@分割------"); println(Charset.defaultCharset()); } public void testByteString(String s) { try { for(int i=0;i<encodes.length;i++) { for(int j=0;j<decodes.length;j++) { print("@encode:"+encodes[i]+"----@decode:"+decodes[j]+":"); println(new String(s.getBytes(encodes[i]),decodes[j])); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
中文编码问题一直会伴随大家,在String这里粗略提一下,希望在以后有时间专门对字符讲解
StringBuffer/StringBuilder
简而言之:都继承了AbstractStringBuilder,但是StringBuffer在方法都做了线程安全(synchronized)。
以实例名StringBuilder su = new StringBuilder();为例:
1. 初始分配空间是16,此后到达16后增加空间为:(su.length()+1)*2;
2. su.append(x) 和 su.insert(su.length(), x) 具有相同的效果,但insert可在su中插入字符,而且更改字符串生成器(借用jdk翻译)
3 trimToSize() 尝试减少用于字符序列的存储空间。
举例:
StringBuilder sb = new StringBuilder(); int size = 16*3; int i = sb.capacity(); while(sb.length()<size) { sb.append("acbdfeihkjmlpnqo"); if(i!=sb.capacity()) { println(i); i = sb.capacity(); } } println(sb.length()); println(sb); println(sb.capacity()); sb.trimToSize(); println(sb.capacity());
我们曾经用StringBuilder做了日志记录行为,用枚举做级别配置,不妨试试自己写个 高效的log4j.
就写这些东西,小结:
1. 单线程之下,就用StringBuilder,考虑线程安全,再用StringBuffer
2. String的“+”号会把字符串变成常量,反复执行已经被优化,比StringBuilder快
3. 正则表达式会慢,但是如果不是高性能要求,用起来也很方便。
4. 考虑接触一下CharSet和Format,Pattern这些类,灵活玩转String.
相关文章推荐
- 黑马程序员——String、StringBuffer、StringBuilder和基本数据类型包装类
- Java——String、StringBuilder、StringBuffer的区别与常用方法
- Java字符串类型String、StringBuilder、StringBuffer的区别
- 常用API(一)——String、StringBuffer与基本类型包装类
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- Java中String,StringBuffer,StringBuilder常用方法及使用实例
- 深入理解String类型、StringBuilder、StringBuffer的区别与使用
- Java中String, StringBuffer, StringBuilder的区别和常用方法
- Java之常用API(Object、String、StringBuffer、StringBuilder)
- String,StringBuffer ,StringBuilder类型区别
- String,StringBuffer ,StringBuilder类型区别
- 应用程序开发——常用类(包装类、String、StringBuffer、StringBuilder、日期类)
- 黑马程序员——Java String、StringBuffer、StringBuilder、基本数据类型对象包装类
- 黑马程序员——03 String,StringBuffer,StringBuilder的联系以及三者的常用方法
- 黑马程序--JAVA字符串String、StringBuffer、StringBuilder、基本数据类型包装
- java基础类型String、StringBuffer、StringBuilder
- 关于String类型遗漏点与StringBuilder、StringBuffer
- 黑马程序员——常用API(StringBuilder和StringBuffer以及基本数据类型包装类)
- String、StringBuffer和StringBuilder区别及其常用方法
- Java常用类库——String、StringBuffer、StringBuilder