- 浏览: 477397 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
excellent95:
谢楼主分享,确实是CSS图片问题
Struts2判断页面是POST方式提交还是GET方式提交 -
wangluo2:
javaBase那个包显示有问题啊pom文件那一行报错了
微信公众平台开发实战(08) 基于地理信息的服务(LBS) -
andilyliao:
jd技术这么渣也好意思出书,真是醉了
《京东技术解密》试读--十年磨一剑 -
bitray:
刘强东作序多什么,他也不会什么技术,腾讯出来帮他还不是因为腾讯 ...
《京东技术解密》试读--十年磨一剑 -
come_for_dream:
想试试搞这个
《大型分布式网站架构设计与实践》试读
String 与StringBuffer区别详解
1. 概念
1.1、 String 与 StringBuffer 的区别
String :在String 类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个Java 字符串中的某个单独字符,所以在JDK 文档中称String 类的对象是不可改变 的。
但是,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。如果新建一个对象指向已有相同内容的String 对象,这会直接指向已有的对象(共享对象),而不会新建String 对象。
StringBuffer :StringBuffer 类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer 类的append 方法追加字符。例如String 使用(+ )操作符添加字符到一个已经存在的字符串后面有效率得多。因为使用(+ )操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串 重新分配内存。使用StringBuffer 类就避免了这个问题。
1.2、 示例 1
代码清单1 :StringAndStringBuffer .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) 先创建了一个名textString 的String 类型的对象引用;
2) 创建一个内容为java 的String 对象(我们假定为对象a );
3) 将textString 引用指向对象a ;
4) 执行stringReplace 方法时,将textString 的地址copy 给text ,text 也指向了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) 先创建了一个名textBuffer 的StringBuffer 类型的对象引用;
2) 创建一个内容为java 的StringBuffer 对象(我们假定为对象a );
3) 将textBuffer 引用指向对象a ;
4) 执行bufferReplace 方法时,把textBuffer 的地址copy 给text ;
5) 然后沿着text 指向的字符串( 其实也就是textBuffer 指向的对象) 操作,添加一个"C" ;
6) 虽然没有任何返回,但是这个操作影响到了textBuffer 所指向的字符串;
7) 所以这里打印"javaC" 。
1.4、 示例 2
代码清单2 :StringAndStringBuffer .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/
- StringAndStringBuffer.rar (4.1 KB)
- 下载次数: 5
- String与StringBuffer.pdf (289.4 KB)
- 下载次数: 8
发表评论
-
Spring Security 3.0 记住密码功能
2016-01-13 22:58 21151,在数据库中新增记录表 -- ---------- ... -
解决JavaMail发邮件抛出找不到SharedByteArrayInputStream类的异常
2011-07-22 11:21 7701在最近项目开发过程中 ... -
怎样让Word自动更新图片与表格编号
2010-12-31 17:03 11738怎样让Word 自动更新图片与表格编号 ... -
W3C_School在线教程chm版制作教程
2010-12-22 21:48 7675W3C_School 在线教程chm 版制作教程 ... -
Spring 3.0 新特性
2010-12-10 10:58 3409Spring 3.0 新特性 ... -
iText生成PDF时表头设置错误导出数据不能完全导出
2010-07-20 12:16 2187在利用iText生成PDF文件时,通常由于数据量比较多时会产生 ... -
事务管理入门-JDBC/Hibernate事务管理器/Spring注解 3种方式
2009-07-28 15:09 4685在软件开发过程中,经 ... -
JavaMail
2009-07-16 16:56 0javamail 怎样设置发件人的名字 http://to ... -
IBM Ajax系列教程
2009-02-16 20:39 1737第 1 部分: Ajax 简介 Ajax ... -
项目经验之弹出页面再弹出页面
2009-02-13 18:58 1108在项目中有这样一个场景,某弹出页面要弹出另一个: 弹出页面: ... -
正则表达式使用之替换多个字符串
2009-02-13 15:44 2568想一次性去掉某个文本文件中的某些字符串: 实现方式: 直接用竖 ... -
OGNL的jar档、文档和源代码
2009-02-05 09:25 52211、官方网站: http://mirrors.ibiblio. ... -
Calendar与java.sql.Date
2008-12-08 15:29 1706在Oracle数据库中,我们会有Date类型的数据,存储格 ... -
利用JavaScript控制单选框
2008-12-04 19:14 2309<script> function f(index ... -
JSP中使用JavaScript重定向页面
2008-12-03 10:04 3361第一种,不重定向,推荐使用。 function init( ... -
如何去掉 Code Pro 的警告标志
2008-11-07 16:35 1339Code Pro 是一个很好的代码格式检查工具,不过有时我们只 ... -
使用Struts提交多行数据
2008-11-07 11:27 3922使用Struts提交多行数据 http://blog.fl ... -
Ant使用经验
2008-10-22 10:18 12931、【示例1】: <?xml version=" ... -
利用JXL(JExcelApi)操作Excel文档
2008-10-09 10:51 52471、工具类: package com.coderdream. ... -
JSP下载文档
2008-10-07 14:08 19221、设置doc格式的文件弹出对话框: <?xml v ...
相关推荐
### String总概况及其特性并与StringBuffer的区别详解 在Java编程语言中,`String`与`StringBuffer`是非常重要的数据类型,被广泛应用于处理文本数据。本文将深入探讨这两个类的基本特性以及它们之间的区别。 ####...
### StringBuffer与String的区别详解 #### 一、概念与特性 **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者...
Java String 和StringBuffer 的详解及区别 Java String 和StringBuffer 是 Java 语言中两个基本的字符串类,它们都是用于存储和操作字符串的,但是它们之间有着很大的区别。 String 类 String 类表示内容不可改变...
Java中String和StringBuffer的区别实例详解 Java中String和StringBuffer都是用来存储字符串的对象,但是它们之间有着很大的区别。下面我们来详细介绍Java中String和StringBuffer的区别实例详解。 首先,String是不...
在Java编程语言中,`CharSequence`是一个接口,它是字符序列的抽象基类,包括`String`、`StringBuffer`和`StringBuilder`等类。理解这些类的特点和用途是优化程序性能的关键。以下是对这些概念的详细解释: 1. `...
### String与StringBuffer知识点详解 #### 一、String与StringBuffer基本概念 **String**:在Java中,`String`类表示不可变的字符序列,它是最常用的字符串类。一旦创建了一个`String`对象,其内容便无法改变。这...
与`String`类不同,`StringBuffer`允许我们修改字符串内容。 ##### 构造函数 1. **无参构造函数** `public StringBuffer()`: 创建一个空白的`StringBuffer`对象。 - 示例代码: ```java StringBuffer sb = new ...
其中,StringBuilder是Java 5引入的新类,它与StringBuffer功能类似,但不保证线程安全。这意味着在单线程环境下,StringBuilder通常比StringBuffer更快,因为它省去了同步开销。 StringBuffer是在多线程环境下使用...
Java中的字符串处理是编程中常见的任务,涉及到三个关键类:String、StringBuffer和StringBuilder。它们在功能上相似,但有着重要的区别,主要体现在字符串的可变性、线程安全性和性能方面。 1. 可变性 - String类...
Java中的`String`、`StringBuilder`和`StringBuffer`都是用来处理字符串的类,它们各自有不同的特性和适用场景。在理解它们之间的区别之前,我们首先要知道它们的共同点。 **共同点:** 1. **都是字符串类**:这三...
在Java编程语言中,`String`、`StringBuilder`和`StringBuffer`都是处理字符串的重要类,但它们在处理方式和性能上有显著的区别。下面将详细解释这三个类的特点和使用场景。 1. **String类** - `String`类是final...
- `StringBuilder`与`StringBuffer`非常相似,但在非多线程环境中通常更快,因为它不保证线程安全。 - 当字符串操作仅在一个线程中发生时,推荐使用`StringBuilder`以提高性能。 - **构建过程**: 1. 创建一个空...
与`String`不同的是,`StringBuffer`的对象可以被修改,这意味着它们是可变的。这使得`StringBuffer`非常适合于执行诸如字符串拼接、插入、删除等操作,尤其是在多线程环境中,它的同步特性保证了线程安全。 #### ...
本篇文章将深入探讨`StringBuffer`的原理、用法及其与`StringBuilder`的区别。 1. **基本概念** `StringBuffer`是Java中处理字符串的类,它继承自`AbstractStringBuilder`并实现了`Serializable`和`CharSequence`...
### Java中的String类型详解 在Java编程语言中,`String` 类型是非常基础且重要的数据类型之一,它代表了一系列字符的有序集合。本篇文章将基于一个具体的示例代码,深入探讨`String`对象的创建、比较以及不同字符...
StringBuffer与String类的主要区别在于其内部实现机制和线程安全性。String对象在进行任何修改时,都会创建一个新的对象,这在内存管理上并不理想,特别是在大量操作时。而StringBuffer则通过维护一个可变的字符序列...
6. String、StringBuffer、StringBuilder 有什么区别? 答案:String、StringBuffer、StringBuilder 最大的不同是 String 不可变,后者可变。StringBuffer 是线程安全的,StringBuilder 线程不安全但是速度较快。...