Java - JavaSE - String | StringBuffer
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java - JavaSE - String | StringBuffer,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2307字,纯文字阅读大概需要4分钟。
内容图文
![Java - JavaSE - String | StringBuffer](/upload/InfoBanner/zyjiaocheng/657/1476bf6b13fb4175a2691607e3584ccd.jpg)
String 类
正则表达式
Pattern 类
s.matches();
s.replaceFirst();
s.replaceAll();
s.split();
StringBuffer
文档说明
根据 StringBuffer 的文档说明可知:
StringBuffer 是线程安全的,主要体现在它的方法上有 synchronized 同步锁,也因此导致其执行效率较低。
StringBuffer 虽然是线程安全的,但是其安全指的是操作上的安全,需要处理的数据在处理过程中不能改变,或者处理的数据不被其他线程共享。也就是处理的数据中途自身发生改变,则得到的结果可能和想要的结果不一致,这种不一致并不是因为线程不安全,而是数据自身的不稳定。
StringBuffer 主要有两个常用方法,append() 和 insert()。
容量问题,如果不超过则不会扩容,超过容量自动扩容。
传入的参数不能是 null,否则会报出 NullPointException。
JDK 5 加入了 StringBuilder,它适用于单线程,且操作相同,由于没有加入 synchronized 同步机制,使得它能更快完成任务,官方优先推荐使用。
StringBuffer 初始化容量
public StringBuffer() {
super(16);
}
public StringBuffer(int capacity) {
super(capacity);
}
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
public StringBuffer(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
由构造方法的源码可知,有三种初始化容量:
- 无参,容量为 16.
- 传入容量值.
- 传入 String 或 实现 CharSequence 接口的类型的数据长度 + 16.
StringBuffer 扩容
StringBuffer 在使用 append() 方法时会扩容,策略有两种:
先将当前容量 * 2,再加 2.
如果此时容量还比追加后的 StringBuffer 长度 minCapacity 小,则使用minCapacity.
此时的容量仍需要判断是否超出 StringBuffer 规定的最大容量,如果超过则可能报出 OutOfMemoryError 异常.
注:可能 是因为 StringBuffer 规定的最大容量和 Integer.MAX_VALUE 仍有 8 个空位.
/*
AbstractStringBuilder.java
StringBuffer 调用的 append() 方法中调用了父类的这个方法
*/
private int newCapacity(int minCapacity) {
// overflow-conscious code
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}
private int hugeCapacity(int minCapacity) {
if (Integer.MAX_VALUE - minCapacity < 0) { // overflow
throw new OutOfMemoryError();
}
return (minCapacity > MAX_ARRAY_SIZE)
? minCapacity : MAX_ARRAY_SIZE;
}
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
/*
Integer.java
*/
@Native public static final int MAX_VALUE = 0x7fffffff;
为了避免频繁扩容影响运行效率,可以提前设定好 StringBuffer 的容量。
内容总结
以上是互联网集市为您收集整理的Java - JavaSE - String | StringBuffer全部内容,希望文章能够帮你解决Java - JavaSE - String | StringBuffer所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。