String
equals比较堆里值
字符串比较用str1.equals(str2);
==比较栈里的值
JDK7以后字符串常量池进入了堆里面。
在Java中,StringBuffer
和 StringBuilder
是用于创建可变字符串的类。它们提供了比 String
更高效的字符串操作,尤其是在需要频繁修改字符串时。以下是关于如何使用这两个类的详细说明。
1. StringBuffer
StringBuffer
是线程安全的,适合在多线程环境下使用。它的主要方法包括:
append()
: 在字符串末尾添加内容insert()
: 在指定位置插入内容delete()
: 删除指定范围的内容reverse()
: 反转字符串
示例代码
public class StringBufferExample {
public static void main(String[] args) {
// 创建 StringBuffer 对象
StringBuffer sb = new StringBuffer("Hello");
// 添加内容
sb.append(" World");
System.out.println("After append: " + sb);
// 插入内容
sb.insert(5, ",");
System.out.println("After insert: " + sb);
// 删除内容
sb.delete(5, 6); // 删除逗号
System.out.println("After delete: " + sb);
// 反转字符串
sb.reverse();
System.out.println("After reverse: " + sb);
}
}
2. StringBuilder
StringBuilder
是非线程安全的,但在单线程环境中性能更好。它的用法与 StringBuffer
非常相似。
示例代码
public class StringBuilderExample {
public static void main(String[] args) {
// 创建 StringBuilder 对象
StringBuilder sb = new StringBuilder("Hello");
// 添加内容
sb.append(" World");
System.out.println("After append: " + sb);
// 插入内容
sb.insert(5, ",");
System.out.println("After insert: " + sb);
// 删除内容
sb.delete(5, 6); // 删除逗号
System.out.println("After delete: " + sb);
// 反转字符串
sb.reverse();
System.out.println("After reverse: " + sb);
}
}
选择使用 StringBuffer
还是 StringBuilder
- 使用
StringBuffer
: 当你需要在多线程环境中安全地操作字符串时。 - 使用
StringBuilder
: 当你在单线程环境中进行大量字符串操作时,StringBuilder
性能更佳。
总结
StringBuffer
和StringBuilder
都是可变的字符串类,适合频繁修改字符串的场景。StringBuffer
是线程安全的,适合多线程环境;而StringBuilder
是非线程安全的,适合单线程环境。- 两者提供了类似的方法用于字符串的操作,如
append()
,insert()
,delete()
, 和reverse()
。
在Java中,可以使用 String
类的 split()
方法来分割字符串。该方法根据指定的正则表达式将字符串分割成多个子字符串,并返回一个字符串数组。以下是一些常见的使用示例和注意事项。
1. 使用 split()
方法
基本用法
public class Main {
public static void main(String[] args) {
String str = "apple,banana,cherry";
// 使用逗号分割字符串
String[] fruits = str.split(",");
// 输出结果
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
2. 指定分割次数
split()
方法还可以接受第二个参数,指定返回的数组的最大长度。这个参数可以用来限制分割的次数。
public class Main {
public static void main(String[] args) {
String str = "apple,banana,cherry,dates";
// 只分割成两个部分
String[] fruits = str.split(",", 2);
// 输出结果
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
3. 使用正则表达式
split()
方法的参数是一个正则表达式,因此你可以使用更复杂的模式来分割字符串。
public class Main {
public static void main(String[] args) {
String str = "apple;banana|cherry,dates";
// 使用正则表达式分割字符串
String[] fruits = str.split("[;|,]"); // 分割符为 ;、| 和 ,
// 输出结果
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
4. 注意事项
-
空字符串: 如果字符串以分隔符开始或结束,或者有连续的分隔符,
split()
方法会返回空字符串。 -
正则表达式特殊字符: 如果分隔符是正则表达式中的特殊字符(如
.
、*
、+
等),需要进行转义。
总结
- 使用
String.split()
方法可以方便地分割字符串。 - 可以根据需要指定分割符和分割次数。
- 注意处理正则表达式的特殊字符和空字符串的情况。