String与StringBuilder关系
来源:互联网 发布:北京现代软件学院 图片 编辑:程序博客网 时间:2024/04/30 12:04
String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
另外,对于 String 我们不得不多说几句:
1.它是引用类型,在堆上分配内存
2.运算时会产生一个新的实例
3.String 对象一旦生成不可改变(Immutable)
3.定义相等运算符(== 和 !=)是为了比较 String 对象(而不是引用)的值
1、String创建一个不可改变的对象,StringBuilder创建一个可以改变的对象。
string str1 = "a";
str1 = "b";
给str1更改值等效新建一个String对象。
string使用“=”操作符实际上就是new string(info)
2、StringBuilder 类解决了对字符串进行重复修改的过程中创建大量对象的问题。初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的。并且允许我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度。
听起来好象StringBuilder比String好很多。是不是到处都用StringBuilder呢?很明显肯定不是了。要不c#也不会要这个String。
看看下面两张图片(摘自http://www.cnblogs.com/kid-li/archive/2006/10/18/532174.html):
====================================
李建忠老师讲解了一下copy-to-write技术。对于两个String类型的变量来说,如下
String str1 = “aa”;
String str2 = “aa”;
当这两个String类型变量的值相同时,实际上他们指向的是同一个内存空间,如下图:
对于StringBuilder对象来说是这样的,如:有两个StringBuilder对象
StringBuilder sb1 = new StringBuilder(“aa”)
StringBuilder sb2 = new StringBuilder(“aa”)
他们在内存中的状态如下图:
当sb2变化时,只是修改sb2中指向的位置。如下图
==============================
- String与StringBuilder关系
- StringBuilder、StringBuffer和String的关系与区别
- StringBuffer的主要方法,及其与StringBuilder、String的关系
- String StringBuffer StringBuilder关系总结
- String与StringBuilder 辩议
- String 与StringBuilder区别
- StringBuilder与String
- string 与StringBuilder区别
- String与StringBuilder
- String 与 StringBuilder
- String,StringBuffer与StringBuilder
- String,StringBuffer与StringBuilder
- String,StringBuffer与StringBuilder
- string与stringBuilder
- string 与 stringBuilder
- String与StringBuilder
- String,StringBuffer与StringBuilder
- String, StringBuffer与StringBuilder
- [经典]Linux内核中get_free_page、kmalloc和vmalloc函数的区别(示例Module)
- linux下安装软件详解
- ps命令详解
- 是否要坚持
- windows 下的静态、动态库
- String与StringBuilder关系
- VS2005中GridView自定义列TemplateField的数据绑定技巧!
- php加速文件eaccelerator.dll集合
- Ubuntu中观看PPStream
- apache泛域名配置+泛域名指向处理文件
- CentOS与REHL以及Redhat、Federal关系
- 电子商务对传统企业的革命
- wpf开发工具
- [经典]Linux内核中ioremap映射的透彻理解