文档章节

String与StringBuffer的区别

李文良
 李文良
发布于 2015/06/13 13:27
字数 459
阅读 192
收藏 17
点赞 0
评论 3

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

差别显著!

© 著作权归作者所有

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

评论(3)

李文良
李文良

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

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

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

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

哪些场景?
凡梦星尘
凡梦星尘
没有绝对的,有些场景还是string比较适用的

暂无相关文章

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 20分钟前 ⋅ 0

前阿里P8架构师:精准定制Java架构师学习计划!

可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,除了掌握J...

java高级架构牛人 ⋅ 23分钟前 ⋅ 0

zookeper学习

https://blog.csdn.net/u012152619/article/category/6470028

~少司命~ ⋅ 24分钟前 ⋅ 0

Spring MVC ,JSON,JQuery,不懂JQuery,跳过了

/spring-mvc-study/src/main/webapp/course_json.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD ......

颖伙虫 ⋅ 24分钟前 ⋅ 0

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

阿里云云栖社区 ⋅ 25分钟前 ⋅ 0

mahout demo

package com.datamine.CollaborativeFiltering.mysql; import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; import org.apache.mahout.cf.taste.impl.recommend......

xiaomin0322 ⋅ 26分钟前 ⋅ 0

red hat openstack 12配置要求

安装 openstack 之前,一般要规划整个系统中,到底要多少台机器来参与openstack, 根据rhosp12的官方文档: 最低要求是3台物理机,1台作为director,一台作为 controller ,一台作为computer....

tututu_jiang ⋅ 28分钟前 ⋅ 0

Rocket-Chip在GitHub上的各个源码

在github上通过搜索Rocket-chip可以得到36个结果:其中 https://github.com/freechipsproject/rocket-chip https://github.com/ucb-bar/riscv-boom https://github.com/ucb-bar/fpga-zynq (......

whoisliang ⋅ 33分钟前 ⋅ 0

【HAVENT原创】CentOS 6.5 下 Nginx 的安装与配置

nginx是轻量级的Web服务器、反向代理服务器及邮件服务器,具有占用内存少,并发能力强的优点,已被广泛应用。本文介绍目前最新版本 1.12.2 的安装。 各版本nginx下载地址:http://nginx.org/...

HAVENT ⋅ 39分钟前 ⋅ 0

查看linux系统重启之前的log -- last_kmsg

当 Linux Kernel 出现 BUG 的时候,后走入 panic flow,这个时候由于 Kernel 出现了严重的问题,adbd 也无法响应 adb 连接请求,这个时候想透过读取 Kernel Log Buffer 来看 Kernel Log 是不...

zyzzu ⋅ 40分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部