api中查询String和StringBuffer的区别,举个例子用一用
时间: 2023-12-10 16:40:16 浏览: 33
String和StringBuffer都是Java中表示字符串的类,但它们有一些重要的区别。
1. 可变性:
String是不可变的,一旦创建就不能再改变它的值。而StringBuffer是可变的,可以在任何时候通过调用它的方法来改变它的值。
例如:
```
String str = "Hello";
str = str + " World"; // 这里实际上是创建了一个新的字符串对象,而不是修改原来的字符串
System.out.println(str); // 输出 "Hello World"
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World"); // 这里是在原来的字符串后面追加内容
System.out.println(sb.toString()); // 输出 "Hello World"
```
2. 线程安全性:
String是不可变的,所以它是线程安全的。而StringBuffer是可变的,所以它是非线程安全的。如果在多线程的情况下需要使用可变的字符串,可以使用StringBuilder,它与StringBuffer类似,但是是非线程安全的,所以在单线程的情况下性能更好。
例如:
```
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 100; i++) {
new Thread(() -> sb.append("a")).start();
}
Thread.sleep(1000);
System.out.println(sb.toString()); // 输出的长度可能不是100,因为StringBuffer不是线程安全的
```
```
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
new Thread(() -> sb.append("a")).start();
}
Thread.sleep(1000);
System.out.println(sb.toString()); // 输出的长度应该是100,因为StringBuilder在单线程下性能更好
```
综上所述,当需要频繁地修改字符串时,应该使用StringBuffer或StringBuilder,而当不需要修改字符串时,应该使用String以提高性能和线程安全性。