文档章节

String与StringBuffer的区别

李文良
 李文良
发布于 2015/06/13 13:27
字数 459
阅读 192
收藏 17

String:

          是对象不是原始类型.
          为不可变对象,一旦被创建,就不能修改它的值.
          对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
          String 是final类,即不能被继承.

StringBuffer:
          是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
          它只能通过构造函数来建立,
         StringBuffer sb = new StringBuffer();
         对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.通过它的append方法向其赋值.

sb.append("hello");

字符串连接操作中StringBuffer的效率要明显比String高:

String对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.

StringBuffer对象实例化后,只对这一个对象操作。

我这里写了一个小的例子,来测试String和StringBuffer在时间和空间使用上的差别。

public class Test {
	public static void main(String args[]) {
		
		String str = "abc";
		StringBuffer sb = new StringBuffer("abc");
		Runtime runtime = Runtime.getRuntime();
		long start = System.currentTimeMillis();
		long startFreememory = runtime.freeMemory();
		for (int i = 0; i < 10000; i++) {
			str += i;
			//测试StringBuffer时候把注释打开
			//sb.append(i);
		}
		long endFreememory = runtime.freeMemory();
		long end = System.currentTimeMillis();
		System.out.println("操作耗时:" + (end - start) + "ms," + "内存消耗:"
				+ (startFreememory - endFreememory)/1024 + "KB");
	}
}



测试结果:

使用String做10000次向一字符串后添加字符串

操作耗时:1872ms,内存消耗:1301KB

使用StringBuffer做10000次向一字符串后添加字符串

操作耗时:15ms,内存消耗:162KB

差别显著!

本文转载自:http://pengcqu.iteye.com/blog/487538

共有 人打赏支持
李文良
粉丝 5
博文 60
码字总数 10597
作品 1
青岛
其他
加载中

评论(3)

李文良
李文良

引用来自“凡梦星尘”的评论

没有绝对的,有些场景还是string比较适用的
个人觉得StringBuffer更加灵活,当然各有各的长处,并没有否定String的意思
西夏一品堂
西夏一品堂

引用来自“凡梦星尘”的评论

没有绝对的,有些场景还是string比较适用的

哪些场景?
凡梦星尘
凡梦星尘
没有绝对的,有些场景还是string比较适用的
java中String、StringBuffer、StringBuilder的区别 - jihite

java中String、StringBuffer、StringBuilder的区别 - jihite 博客园jihite2018-01-011 阅读 StringBufferjavaString Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串 ......

博客园_jihite
01/01
0
0
Stringbuffer StringBuilder String

StringBuffer与String主要的区别是: 1.StingBuffer在进行字符串处理时不生成新的对象,但是String的每次修改都是产生新的对象,所以在内存上StringBuffer优于String 2.StirngBuffer只能通过...

战地春梦
2015/07/28
0
0
String,StringBuilder,StringBuffer对比

简述 StringBuilder 对比 StringBuffer StringBuilder是非线程安全 StringBuffer是线程安全的。 StringBuilder和StringBuffer其余的特性都是一样的,他们与String的区别: StringBuilder与S...

Real_man
03/20
0
0
Java深究之String、StringBuffer、StringBuilder的区别

在Java学习中,String、StringBuffer、StringBuilder三者是很重要的,在编写代码中经常使用到他们,那么深入的了解他们的异同是非常重要的,接下里我们详细剖析下这三个的异同之处 首先总结下...

MaxBill
07/02
0
0
String、StringBuilder、StringBuffer

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类。String类是不可变类,...

Elivense
2016/12/19
5
0

没有更多内容

加载失败,请刷新页面

加载更多

崩溃bug日志总结1

目录介绍 1.1 java.lang.UnsatisfiedLinkError找不到so库异常 1.2 java.lang.IllegalStateException非法状态异常 1.3 android.content.res.Resources$NotFoundException 1.4 java.lang.Ille......

潇湘剑雨
57分钟前
0
0
学习大数据为什么要先学Java?

计算机编程语言有很多,目前用的多一点的就是Java,C++,Python等等。目前大多数学习大数据的人都是选择学习Java,那Java到底好在哪呢?为什么学大数据之前要先学Java呢?我们今天就来分析一...

董黎明
今天
1
0
php删除服务器所有session

php删除服务器所有session踢掉所有在线用户linux 注意:如果要删除服务器上所有session,重启php服务是解决不了问题的,php的session是持久化的。 有效解决办法: 删除 /tmp 下的所有文件(默...

妖尾巴
今天
0
0
Ubuntu18.04 安装最新版WPS

1.手动卸载libreoffice:sudo apt-get remove --purge libreoffice* 2.官网下载WPS和字体: WPS:http://wps-community.org/download.html 字体:http://wps-community.org/download.html?vl......

AI_SKI
今天
4
0
数据结构(算法)-图(深度优先搜索 DFS)

#include <iostream>using namespace std;#define MaxVex 30typedef char VertexType;typedef struct vexNode adjList[MaxVex];struct edgeNode{int adjvex;//邻接点......

ashuo
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部