0.创建方法
String
String s1 = "docn.net"; // String 直接创建
String s2 = s1; // 相同引用
String s3 = new String("docn.net"); // String 对象创建
char[] ch = { 'd', 'o', 'c', 'n', '.', 'n','e','t'};//字符数组
String str = new String(ch);//通过字符数组创建
直接创建和对象创建的区别:
直接创建的String当遇到字符串常量时,即上述例子中的docn.net,他首先会在公共池中查找是否存在上述字符串,如果存在则直接指向,如果不存在则先在公共池中添加字符串在指向。
new创建的则是在堆中。
StringBuilder StringBuffer
StringBuilder sb = new StringBuilder(8);//builder创建
StringBuffer sb = new StringBuffer(8);//buffer创建
1.String常用方法
以下是一些常用的String类方法,以”docn.net”作为示例字符串:
- length(): 返回字符串的长度。
String str = "docn.net";
int length = str.length(); // length = 8
- charAt(int index): 返回指定索引处的字符。
String str = "docn.net";
char ch = str.charAt(2); // ch = 'c'
- substring(int beginIndex): 返回从指定索引开始到字符串末尾的子字符串。
String str = "docn.net";
String subStr = str.substring(4); // subStr = ".net"
- substring(int beginIndex, int endIndex): 返回从指定的开始索引到结束索引(不包括结束索引)的子字符串。
String str = "docn.net";
String subStr = str.substring(1, 4); // subStr = "ocn"
- indexOf(String str): 返回指定子字符串在原字符串中第一次出现的索引位置。
String str = "docn.net";
int index = str.indexOf("net"); // index = 5
- contains(CharSequence sequence): 检查字符串是否包含指定的字符序列。
String str = "docn.net";
boolean contains = str.contains("cn"); // contains = true
- startsWith(String prefix): 检查字符串是否以指定的前缀开头。
String str = "docn.net";
boolean startsWith = str.startsWith("doc"); // startsWith = true
- endsWith(String suffix): 检查字符串是否以指定的后缀结尾。
String str = "docn.net";
boolean endsWith = str.endsWith("net"); // endsWith = true
- toUpperCase(): 将字符串转换为大写形式。
String str = "docn.net";
String upperCase = str.toUpperCase(); // upperCase = "DOCN.NET"
- toLowerCase(): 将字符串转换为小写形式。
String str = "DOCN.NET";
String lowerCase = str.toLowerCase(); // lowerCase = "docn.net"
这些只是String类的一些常用方法,还有其他许多方法可用于字符串操作。可以根据需要查阅Java官方文档以获取更多详细信息。
2.StringBuilder/StringBuffer常用方法
- append(String str): 将指定的字符串追加到当前StringBuilder对象的末尾。
StringBuilder sb = new StringBuilder();
sb.append("docn");
sb.append(".net");
String result = sb.toString(); // result = "docn.net"
- insert(int offset, String str): 在指定的偏移量处将指定的字符串插入到当前StringBuilder对象中。
StringBuilder sb = new StringBuilder("doc.net");
sb.insert(3, "n");
String result = sb.toString(); // result = "docn.net"
- delete(int start, int end): 删除从指定开始索引到结束索引(不包括结束索引)的字符。
StringBuilder sb = new StringBuilder("docn.net");
sb.delete(4, 7);
String result = sb.toString(); // result = "docnt"
- replace(int start, int end, String str): 使用指定的字符串替换从开始索引到结束索引(不包括结束索引)的字符。
StringBuilder sb = new StringBuilder("docn.net");
sb.replace(2, 4, "sx");
String result = sb.toString(); // result = "dosx.net"
- reverse(): 反转当前StringBuilder对象中的字符顺序。
StringBuilder sb = new StringBuilder("docn.net");
sb.reverse();
String result = sb.toString(); // result = "ten.ncod"
- length(): 返回当前StringBuilder对象中字符的长度。
StringBuilder sb = new StringBuilder("docn.net");
int length = sb.length(); // length = 8
- toString(): 将当前StringBuilder对象转换为String对象。
StringBuilder sb = new StringBuilder("docn.net");
String result = sb.toString(); // result = "docn.net"
StringBuffer常用方法与StringBuilder类似。
3.java String StringBuilder StringBuffer区别
- 不可变性:
- String是不可变的,一旦创建,它的值就不能被修改。任何对String的修改操作都会创建一个新的String对象。
- StringBuilder和StringBuffer是可变的,可以进行修改和操作,而不会创建新的对象。它们允许在现有对象的基础上进行添加、删除、替换等操作。
- 线程安全性:
- String是线程安全的,因为它是不可变的,多个线程可以同时访问和共享String对象。
- StringBuilder是非线程安全的,适用于单线程环境。如果在多线程环境下使用StringBuilder,需要进行额外的同步处理。
- StringBuffer是线程安全的,适用于多线程环境。它的方法都是同步的,保证了线程安全性,但也导致了一定的性能损失。
- 性能:
- String在进行频繁的字符串连接或修改时,由于不可变性会导致大量的对象创建和内存开销,性能较差。
- StringBuilder在单线程环境下性能最好,因为它不需要进行额外的同步操作。
- StringBuffer在多线程环境下提供了线程安全性,但由于同步操作的开销,性能相对较差。
一般来说:
- 如果字符串不需要修改,或者只是进行少量的修改操作,使用String是合适的选择。
- 如果字符串需要频繁的修改操作,并且在单线程环境下使用,使用StringBuilder可以提高性能。
- 如果字符串需要频繁的修改操作,并且在多线程环境下使用,使用StringBuffer来保证线程安全。
© 版权声明
- 本博客所拥有的文章除特别声明外,均默认采用 CC BY 4.0 许可协议。
- 文章部分内容可能来源于公共网络,如有侵权,请联系博主在核实后进行修改或删除。
THE END
- 最新
- 最热
只看作者