StringBuffer必须new出来,StringBuffer的append的效率比string的+=的效率高,其实发现还有很大的区别:
public class Test {
public static void stringReplace (String text) {
text = text.replace('j' , 'i');
}
public static void bufferReplace (StringBuffer text) {
text = text.append("C");
}
public static void main (String args[]) {
String textString = new String ("java");
StringBuffer textBuffer = new StringBuffer ("java");
stringReplace (textString);
bufferReplace (textBuffer);
System.out.println (textString + textBuffer);
}
}
答案是: javajavaC
这是Java参数传递(by value)造成的,而题目中第七行text = text.append (“C”),append方法会改变text中的值而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。
string的值永远不会改变!
String a = "a";//假设a指向地址0x0001,
a = "b";//重新负值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。
从表面上看String类型的对象改变了值,但事实是他不能改变值,只能改变指向的地址StringBuffer则不同,直接改变指向的地址中保留的值。
StringBuffer s1 = new StringBuffer("a");
StringBuffer s2 = new StringBuffer("a");
s1.equals(s2)//为什么是false
StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,而Object类中的equals方法是用来比较地址的,所以等于false.
String s1 = new String("a");
String s2 = new String("a");
s1.equals(s2)//为什么是true
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是true。
分享到:
相关推荐
在Java编程语言中,String类扮演着至关重要的角色,它被用来表示不可变的字符序列。不同于C语言中的字符数组,Java的String是对象,并且一旦创建,其内容就不能更改。这种特性使得String对象在处理文本数据时既安全...
`StringBuffer`和`String`一样,都被定义在`java.lang`包中,并且两者都被定义为`final`类,意味着它们不能有子类。 #### 总结 在Java中,字符串处理主要围绕`String`和`StringBuffer`展开。`String`提供了不可...
#### String和StringBuffer的区别 `String`和`StringBuffer`在Java中都是用来处理字符串的,但它们有着本质的区别: 1. **不变性**:`String`对象是不可变的,一旦创建,其内容不能改变。这意味着任何对`String`的...
不一样。前者是在常量池中创建字符串,后者是在堆中创建字符串。两者都是独立的对象,即使内容相同,它们也不是同一个对象。 9.如何将字符串反转? 可以使用 StringBuilder 或 StringBuffer 的 reverse 方法来反转...
**1.34 `String`与`StringBuffer`的区别** - **知识点**: `String`是不可变的,而`StringBuffer`是可变的。 - **举例**: `String s = "Hello"; s.concat("World");` 会创建新对象,而`StringBuffer sb = new ...
对称字符串(或回文字符串)是指正向读和反向读都一样的字符串。例如,“madam”、“level”都是对称字符串。判断一个字符串是否为对称字符串的关键在于比较该字符串与其反转后的字符串是否相同。 #### 2. `...
`String`对象一旦创建后不可更改,而`StringBuffer`可以动态修改。 - **C. StringBuilder 的 equals 方法** 错误。`StringBuilder`并没有重写`equals`方法,因此不能用来比较对象内容。 - **D. String 的 equals ...
在Java中,String、StringBuilder、StringBuffer三者的区别是,String主要用于少量的字符串操作,它是final修饰的不可变字符串。StringBuilder和StringBuffer都是用来拼接字符串的,StringBuffer是线程安全的但是...
`indexOf(String str)`和`lastIndexOf(String str)`分别用于查找子字符串第一次出现和最后一次出现的位置,而`startsWith(String prefix)`和`endsWith(String suffix)`则用来检查字符串是否以指定前缀或后缀开始或...
- **答案**:不一样。`String str="i"` 会将字符串 `"i"` 放入常量池中,而 `String str=new String("i")` 则是在堆中创建一个新的 `String` 对象。 #### 9. 如何将字符串反转? - 使用 `StringBuilder` 或 `...
23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 10 27、描述一下JVM 加载class 文件的...
String和StringBuffer的区别: String是不可变的,每次修改字符串都意味着创建新的String对象;而StringBuffer是可变的,可以在原有对象的基础上进行修改,适合频繁修改字符串内容的场景。 数组和字符串的length...
String和StringBuffer的区别 - `String`是不可变的,一旦创建就不能改变。 - `StringBuffer`是可变的字符串缓冲区,可以在运行时动态修改。 #### 35. 如何把一段逗号分割的字符串转换成一个数组? 可以使用`split...
String和StringBuffer的区别 - **`String`**:不可变字符串,一旦创建就不能修改。 - **`StringBuffer`**:可变字符串,可以高效地修改字符串内容。 #### 35\. 如何把一段逗号分割的字符串转换成一个数组? 可以...
5. switch语句在Java中可以作用于byte和short类型,但不能直接作用于long和String类型。对于long和String类型,需要进行额外的转换和处理才能使用switch语句。 6. short类型在执行运算时会被提升为int类型,所以s1=...
34. **String和StringBuffer的区别** - `String`是不可变的,而`StringBuffer`是可变的。 - `StringBuffer`提供了线程安全的方法,适合多线程环境下的字符串操作。 35. **如何把一段逗号分割的字符串转换成一个...
switch语句同样可以作用在String类型上,这是因为String类型在Java中是不可变的,且可以与整型值一样进行hash运算。 Java语言的数据类型分为基本类型和引用类型,基本类型包括int、char、byte等,而引用类型包括...
- **`String`**与**`StringBuilder/StringBuffer`**的区别主要在于可变性和线程安全性。 **8. `String str="i"`与`String str=new String("i")`一样吗?** - 不完全一样。 - `String str="i"`直接赋值,字符串...