程序执行过程,String、StringBuffer区别

本文对比分析了String和StringBuffer两种Java字符串类型的特性与应用场景,包括它们在内存管理、执行速度及多线程环境下的表现,并阐述了选择不同类型的理由。

程序执行过程

执行某个程序时,先由硬盘load到内存区,由操作系统执行代码,内存管理分为四个区域:代码区(code segment)、常量区(data segment)、栈(stack)、堆(heap)。
代码区(code segment)用于存放代码,常量区(data segment),用于存放静态变量和字符串常量,可以共享(String类型就存放在这个区域),栈(stack),用于存放局部变量,堆(heap),用于存放new出来的东西
如下图所示:
这里写图片描述

String和StringBuffer的区别

执行速度方面的比较:StringBuffer > String
简单来说:
1. String:字符串常量,生成后不可修改,重新赋值后必须创建一个新的对象,存储在data segment区
2. StringBuffer:对象引用传递特点,字符串变量,生成后可修改,需要进行增加、插入、修改、删除时用StringBuffer,修改即指向一个新的对象的引用

String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个Java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。
StringBuffer:StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。
StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。

其他详细区别
参考博客:[http://blog.youkuaiyun.com/lclai/article/details/6141548]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值