`
xm_king
  • 浏览: 395367 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Spring技术内幕读书笔...
浏览量:15658
社区版块
存档分类
最新评论

StringBuffer可变String不可变的真正原因

    博客分类:
  • JAVA
JDK 
阅读更多

      String和StringBuffer 都是finall类,他们生成的对象在堆中都是不可变 的,在他们内部都是靠属性char数组实现的,

那为什么StringBuffer 可以在对象中追加字符串呢?呵呵,因为String中的char数组是finall的,也就是常量,是不可改变的,而StringBuffer 继承自抽象类AbstractStringBuilder,他的内部实现靠他的父类完成,AbstractStringBuilder内的char数组是变量,可以用append追加。即也就是可以分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

 

          StringBuffer 和StringBuilder都实现了AbstractStringBuilder抽象类,此抽象类实现Appendable接口因此可追加

(在JDK 6.0 API中StringBuilder和Stringbuff写着都继承自Object 而且在他的API中找不到AbstractStringBuilder类)。

分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    通过上面的分析,我们可以看到,String类的字符串是不可变的,而StringBuffer和StringBuilder类的字符串可以被修改。StringBuffer类是线程安全的,而StringBuilder类不是线程安全的。 在选择字符串类时,我们需要...

    String ,StringBuffer与StringBuilder

    String, StringBuffer 与 StringBuilder 的区别 ...String 是不可变类,StringBuffer 是可变类,而 StringBuilder 是线程不安全的可变类。根据不同的使用场景,我们可以选择合适的类来实现字符操作。

    String、StringBuilder和StringBuffer的区别

    相比之下,`StringBuilder`和`StringBuffer`是可变的字符序列,它们允许在原有对象基础上进行修改,而不创建新对象。`StringBuilder`是Java 5.0新增的类,它是非线程安全的,这意味着在单线程环境下,StringBuilder...

    StringBuffer和String_区别

    **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者不变的数据。 **StringBuffer** 是 Java 提供的一个线程安全...

    string与stringbuffer的区别

    `String`类是不可变的,这意味着一旦创建了一个`String`对象,它的内容就不能被修改。每次对`String`对象进行操作(如拼接、替换字符等),都会创建一个新的`String`对象。这种特性使得`String`在多线程环境下更...

    string和StringBuffer的区别

    1. 可变性:`String`不可变,`StringBuffer`(和`StringBuilder`)可变。 2. 性能:频繁修改字符串时,`StringBuffer`(或`StringBuilder`)性能优于`String`。 3. 线程安全:`StringBuffer`是线程安全的,`...

    String和StringBuffer的区别

    首先,`String`类是不可变的,这意味着一旦创建了一个`String`对象,它的内容就不能改变。当我们尝试修改`String`对象时,实际上是创建了一个新的`String`对象。例如,`str += "hello"`实际上会创建一个新的`String`...

    String及StringBuffer和StringBuilder的区别

    String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一个新的 String 对象,然后将指针指向新的 String 对象。这意味着,如果经常改变字符串内容,最好不要使用 String 类型,因为每次生成对象都会对...

    String-StringBuffer-StringBuilder

    此外,由于`String`对象是不可变的,多个线程可以安全地共享同一个`String`对象,而不用担心数据竞争问题。 接着,`StringBuffer`是在多线程环境下处理字符串的首选。它提供了一个可变的字符序列,允许在已有字符串...

    String、StringBuffer、StringBuilder的使用方法

    `String`是不可变的类,意味着一旦创建了`String`对象,就不能更改其内容。它在内存中的表现形式是字符数组,所以每次对`String`对象进行修改(如拼接)都会创建一个新的`String`对象,这可能导致大量的内存开销。...

    String&Stringbuffer

    1. **可变性**:`String`对象是不可变的,而`StringBuffer`对象是可变的。 2. **性能**:对于频繁修改的字符串,使用`StringBuffer`会比不断创建新`String`对象更加高效。 3. **线程安全性**:`StringBuffer`的所有...

    java面试笔试题String 和StringBuffer的区别

    与`String`不同,`StringBuffer`是一个可变的字符序列,允许在其内容上进行修改,如添加、删除或替换字符。`StringBuffer`的设计主要针对需要频繁修改字符串的场景,提供了一种更高效的方式。以下是`StringBuffer`的...

    String与StringBuffer区别详解

    - `String`类是不可变的,意味着一旦创建,其内容就不能改变。每次对`String`对象进行修改(如连接、替换字符等),都会生成一个新的`String`对象。这是因为`String`对象存在于常量池中,修改操作实际上是在常量池...

    String总概况及其特性并与StringBuffer的区别详解

    - **不可变性 vs 可变性**:`String`是不可变的,而`StringBuffer`是可变的。 - **性能考量**:在单线程环境中,频繁使用字符串拼接时`StringBuilder`(`StringBuffer`的一个非同步版本)通常比`StringBuffer`更...

    String和StringBuffer详细用法总结

    在Java中,`String` 类表示不可变的字符序列,也就是说一旦创建了一个字符串对象后,其内容就不能被更改。这使得`String`对象非常适合于处理固定不变的数据。当需要对字符串进行频繁修改时,使用`String`会带来性能...

    JAVA中String与StringBuffer的区别 自己的学习笔记总结

    1. **不可变性**:`String` 类表示的是不可变的字符序列。一旦创建了一个 `String` 对象,其内容就不能被修改。这意味着如果尝试改变一个 `String` 对象的值,将会创建一个新的 `String` 对象。 ```java String ...

    一篇讲清楚String、StringBuffer和StringBuild.doc

    * String 是不可变的字符序列,而 StringBuffer 和 StringBuilder 是可变的字符序列。 * StringBuffer 是线程安全的,而 StringBuilder 不是线程安全的。 * 在性能方面,StringBuilder 比 StringBuffer 快。 String...

    Java中String,StringBuffer与StringBuilder的区别

    String 类型是不可变的对象,这意味着一旦创建了 String 对象,就不能再修改它。例如,如果你想将一个 String 对象从 "Hello" 改为 "Hello World",实际上是创建了一个新的 String 对象,并将旧的对象弃用。这种机制...

Global site tag (gtag.js) - Google Analytics