`
CoderDream
  • 浏览: 478377 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

String与StringBuffer区别详解

阅读更多

 

String StringBuffer区别详解

 

1.      概念

1.1、    String StringBuffer 的区别

String :在String 类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个Java 字符串中的某个单独字符,所以在JDK 文档中称String 类的对象是不可改变 的。

但是,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。如果新建一个对象指向已有相同内容的String 对象,这会直接指向已有的对象(共享对象),而不会新建String 对象。

StringBufferStringBuffer 类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer 类的append 方法追加字符。例如String 使用(+ )操作符添加字符到一个已经存在的字符串后面有效率得多。因为使用(+ )操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串 重新分配内存。使用StringBuffer 类就避免了这个问题。

1.2、    示例 1

代码清单1StringAndStringBuffer .java 片段

public static void stringReplace(String text) {

      text = text.replace( 'j' , 'i' );

      System. out .println( "text in stringReplace: " + text);

}

public static void bufferReplace(StringBuffer text) {

      text = text.append( "C" );

      System. out .println( "text in bufferReplace: " + text);

}

@Test

public void test1() {

      String textString = new String( "java" );

      StringBuffer textBuffer = new StringBuffer( "java" );

 

      stringReplace (textString);

      bufferReplace (textBuffer);

 

      System. out .println(textString + textBuffer);

}

输出结果:

text in stringReplace: iava

text in bufferReplace: javaC

javajavaC

1.3、    解析

String 示例


1)     先创建了一个名textStringString 类型的对象引用;

2)     创建一个内容为javaString 对象(我们假定为对象a );

3)     textString 引用指向对象a

4)     执行stringReplace 方法时,将textString 的地址copytexttext 也指向了textString对象a

5)     text.replace('j', 'i'); 的结果是生成新的String 类型对象b 内容为"iava"

6)     这里要注意,String 对象时final 类型的,内容是不可以改变的,所以会新建一个String 类型的对象b

7)     所以,text = text.replace('j', 'i'); 就会重新使text 指向对象b

8)     由于该方法的返回类型是void, 所以原来的textString 没变。

   

StringBuffer 示例


1)     先创建了一个名textBufferStringBuffer 类型的对象引用;

2)     创建一个内容为javaStringBuffer 对象(我们假定为对象a );

3)     textBuffer 引用指向对象a

4)     执行bufferReplace 方法时,把textBuffer 的地址copytext

5)     然后沿着text 指向的字符串( 其实也就是textBuffer 指向的对象) 操作,添加一个"C"

6)     虽然没有任何返回,但是这个操作影响到了textBuffer 所指向的字符串;

7)     所以这里打印"javaC"

1.4、    示例 2

代码清单2StringAndStringBuffer .java 片段

@Test

public void test2() {

      // 生成一个新的引用对象,指向 String 对象 "java"

      String textString = new String( "java" );

      System. out .println( "HashCode: " + textString.hashCode() + "\tValue:"

                 + textString);

      // 引用对象指向新的 String 对象 "ja"

      textString = textString.substring(0, 2);

      // 前后指向不同的引用,所以 HashCode 不同

      System. out .println( "HashCode: " + textString.hashCode() + "\tValue:"

                 + textString);

 

      // 生成一个新的引用对象,指向 StringBuffer 对象 "java"

      StringBuffer textBuffer = new StringBuffer( "java" );

      System. out .println( "HashCode: " + textBuffer.hashCode() + "\tValue:"

                 + textBuffer);

      // 直接操作 StringBuffer 对象,在后面加字符串 "abc"

      textBuffer.append( "abc" );

      // 前后引用指向不变,所以 HashCode 相同

      System. out .println( "HashCode: " + textBuffer.hashCode() + "\tValue:"

                 + textBuffer);

}

输出结果:

HashCode: 3254818  Value:java

HashCode: 3383 Value:ja

HashCode: 17682935      Value:java

HashCode: 17682935      Value:javaabc

1.5、    源代码

 

见附件。

 

我的联系方式: 85337464

我的博客 1 http //coderdream.iteye.com/

我的博客 2 http://coderdream.blogjava.net/

 

  • 大小: 37.2 KB
  • 大小: 58.8 KB
1
1
分享到:
评论

相关推荐

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

    ### String总概况及其特性并与StringBuffer的区别详解 在Java编程语言中,`String`与`StringBuffer`是非常重要的数据类型,被广泛应用于处理文本数据。本文将深入探讨这两个类的基本特性以及它们之间的区别。 ####...

    StringBuffer和String_区别

    ### StringBuffer与String的区别详解 #### 一、概念与特性 **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者...

    Java String 和StringBuffer的详解及区别

    Java String 和StringBuffer 的详解及区别 Java String 和StringBuffer 是 Java 语言中两个基本的字符串类,它们都是用于存储和操作字符串的,但是它们之间有着很大的区别。 String 类 String 类表示内容不可改变...

    java中 String和StringBuffer的区别实例详解

    Java中String和StringBuffer的区别实例详解 Java中String和StringBuffer都是用来存储字符串的对象,但是它们之间有着很大的区别。下面我们来详细介绍Java中String和StringBuffer的区别实例详解。 首先,String是不...

    java CharSequence、String、StringBuffer、StringBuilder详解

    在Java编程语言中,`CharSequence`是一个接口,它是字符序列的抽象基类,包括`String`、`StringBuffer`和`StringBuilder`等类。理解这些类的特点和用途是优化程序性能的关键。以下是对这些概念的详细解释: 1. `...

    String&Stringbuffer

    ### String与StringBuffer知识点详解 #### 一、String与StringBuffer基本概念 **String**:在Java中,`String`类表示不可变的字符序列,它是最常用的字符串类。一旦创建了一个`String`对象,其内容便无法改变。这...

    Java中的String、StringBuffer和Math类

    与`String`类不同,`StringBuffer`允许我们修改字符串内容。 ##### 构造函数 1. **无参构造函数** `public StringBuffer()`: 创建一个空白的`StringBuffer`对象。 - 示例代码: ```java StringBuffer sb = new ...

    Java 中String StringBuilder 与 StringBuffer详解及用法实例

    其中,StringBuilder是Java 5引入的新类,它与StringBuffer功能类似,但不保证线程安全。这意味着在单线程环境下,StringBuilder通常比StringBuffer更快,因为它省去了同步开销。 StringBuffer是在多线程环境下使用...

    Java中String、StringBuffer、StringBuilder的区别详解

    Java中的字符串处理是编程中常见的任务,涉及到三个关键类:String、StringBuffer和StringBuilder。它们在功能上相似,但有着重要的区别,主要体现在字符串的可变性、线程安全性和性能方面。 1. 可变性 - String类...

    java String、StringBuilder和StringBuffer的区别详解

    Java中的`String`、`StringBuilder`和`StringBuffer`都是用来处理字符串的类,它们各自有不同的特性和适用场景。在理解它们之间的区别之前,我们首先要知道它们的共同点。 **共同点:** 1. **都是字符串类**:这三...

    String、StringBuilder和StringBuffer超详解

    在Java编程语言中,`String`、`StringBuilder`和`StringBuffer`都是处理字符串的重要类,但它们在处理方式和性能上有显著的区别。下面将详细解释这三个类的特点和使用场景。 1. **String类** - `String`类是final...

    Java软件开发实战 Java基础与案例开发详解 9-2 StringBuffer和String Builder类共9页.pdf

    - `StringBuilder`与`StringBuffer`非常相似,但在非多线程环境中通常更快,因为它不保证线程安全。 - 当字符串操作仅在一个线程中发生时,推荐使用`StringBuilder`以提高性能。 - **构建过程**: 1. 创建一个空...

    StringBuffer

    与`String`不同的是,`StringBuffer`的对象可以被修改,这意味着它们是可变的。这使得`StringBuffer`非常适合于执行诸如字符串拼接、插入、删除等操作,尤其是在多线程环境中,它的同步特性保证了线程安全。 #### ...

    java StringBuffer详解

    本篇文章将深入探讨`StringBuffer`的原理、用法及其与`StringBuilder`的区别。 1. **基本概念** `StringBuffer`是Java中处理字符串的类,它继承自`AbstractStringBuilder`并实现了`Serializable`和`CharSequence`...

    详解Java的String类型程序

    ### Java中的String类型详解 在Java编程语言中,`String` 类型是非常基础且重要的数据类型之一,它代表了一系列字符的有序集合。本篇文章将基于一个具体的示例代码,深入探讨`String`对象的创建、比较以及不同字符...

    Android StringBuffer的使用方法详解

    StringBuffer与String类的主要区别在于其内部实现机制和线程安全性。String对象在进行任何修改时,都会创建一个新的对象,这在内存管理上并不理想,特别是在大量操作时。而StringBuffer则通过维护一个可变的字符序列...

    10个Java经典的String面试题

    6. String、StringBuffer、StringBuilder 有什么区别? 答案:String、StringBuffer、StringBuilder 最大的不同是 String 不可变,后者可变。StringBuffer 是线程安全的,StringBuilder 线程不安全但是速度较快。...

Global site tag (gtag.js) - Google Analytics