[转帖]String、StringBuilder与StringBuffer
2024-10-20 08:31:09
String、StringBuilder与StringBuffer
https://www.jianshu.com/p/37f3799bdb56
1.String
String本质
String是不可变的,他的实质是被final修饰过的char数组。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
String方法
编号 | 方法 | 说明 |
---|---|---|
1 | char charAt(int index) | 返回指定索引处的 char 值。 |
2 | int compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
3 | boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 |
4 | byte[] getBytes() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
5 | int length() | 返回此字符串的长度。 |
6 | boolean matches(String regex) | 告知此字符串是否匹配给定的正则表达式。 |
7 | String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
8 | String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
9 | String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的一个子字符串。 |
10 | char[] toCharArray() | 将此字符串转换为一个新的字符数组。 |
11 | String trim() | 返回字符串的副本,忽略前导空白和尾部空白。 |
有关String的面试题
String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆内存中
System.out.println(s1==s2); // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true
2.StringBuilder与StringBuffer
简短介绍
String:字符串常量,字符串长度不可变。用于存放字符的数组被声明为final。
StringBuffer:字符串变量(Synchronized,即线程安全)。可将字符串缓冲区安全地用于多个线程。
StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
使用选择
- 如果要操作少量的数据用 String,大量操作使用StringBuffer 和 StringBuilder 是因为能够被多次的修改,并且不产生新的未使用对象。
- 单线程大量操作数据用StringBuilder,它的速度大于StringBuffer。
- 多线程大量操作数据用StringBuffer,但是stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确,所以并不常用。
StringBuilder操作小案例
StringBuildera=newStringBuilder("");
a.append("i'm a good boy");//附加
System.out.println(a.toString());
a=a.reverse();//翻转
System.out.println(a.toString());
a.delete(0,1);//删除
System.out.println(a.toString());
a.insert(0,"ha");//插入
System.out.println(a.toString());
a.replace(1,2,"666");//替换
System.out.println(a.toString());
对应结果
i'm a good boy
yob doog a m'i
ob doog a m'i
haob doog a m'i
h666ob doog a m'i
最新文章
- webpack入坑之旅(三)webpack.config入门
- BZOJ1568: [JSOI2008]Blue Mary开公司
- [转载]Altium规则详解及设置
- UESTC 881 神秘绑架案 --二维DP
- jQuery对象与DOM对象之间的转换
- JS 精粹(方法)
- javascript高级知识点——指定上下文实现
- CentOS安装Git服务器
- JsonCpp(C++程序使用)
- Linux入门篇(四)——Vim的使用与Bash
- Core官方DI解析(2)-ServiceProvider
- JavaScript(二)
- Django1.11.7配置静态文件
- .NET代码混淆——开源.net 混淆器ConfuserEx介绍
- how many shards and replicas should be set for Elastic Search
- 一个非常好用的图片切割工具(c# winform开发)
- 用Linux中man命令查询C函数
- (译)Getting Started——1.3.2 Using Design Patterns(使用设计模式)
- Linux 下添加用户,修改权限
- HBase import tsv,csv File