黑马程序员----string和StringBuilder的区别

本文详细对比了String与StringBuilder两个类的特点。String类是不可变的,每次修改都会创建新的对象,而StringBuilder则允许直接修改原有对象,适用于频繁修改字符串的场景。文章还介绍了StringBuilder的容量属性及其动态扩容机制。

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

 

String 对一串字符进行操作。不可变类,对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。

StringBuilder 也是对一串字符进行操作,但是可变类。

虽然 StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前 StringBuilder 对象容纳的字符串长度混淆在一起。例如,可以创建 StringBuilder 类的带有字符串“Hello”(长度为 5)的一个新实例,同时可以指定该对象的最大容量为 25。当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量

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

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

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

String str = new String("welcome to "); str += "here"; 的处理步骤实际上是通过建立一个StringBuilder,让侯调用append(),最后 再将StringBuilder toSting(); 这样的话String的连接操作就比StringBuilder多出了一些附加操作,当然效率上要打折扣.

并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值. 这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.

 

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

 

转载于:https://www.cnblogs.com/itnetwork/archive/2012/10/08/itnetwork8.html

### 黑马程序员 Java 学习资料资源 #### 1. 基础入门程 对于初学者来说,选择一套全面而系统的Java基础入门课程至关重要。黑马程序员提供了一套适合零基础学员的Java基础视频程[^1]。这套仅涵盖了安装JDK、编写第一个HelloWorld案例等内容,还深入讲解了数据类型、运算符、分支结构以及循环结构等基础知识。 #### 2. 开发环境配置与工具使用 除了理论知识外,实际操作也是可或缺的一部分。程中专门安排章节介绍如何设置IDEA开发工具,并通过具体实例帮助理解数组的应用场景[^3]。这有助于新手快速上手实践编程任务。 #### 3. 面向对象编程概念 为了更好地掌握面向对象的思想,在后续的学习过程中会涉及到类对象的概念及其应用方式。其中包括`String`类的操作方法、`StringBuilder`类的特点对比分析;还有关于集合框架中的`ArrayList`容器类型的特性说明等知识点。 #### 4. 异常处理机制详解 在任何一门编程语言里都可避免地要面对错误情况的发生。针对这一点,《黑马程序员》系列课程特别强调了异常处理的重要性,并详细解释了几种常见的运行时异常类型如数组越界(`ArrayIndexOutOfBoundsException`)、空指针(`NullPointerException`)等问题产生的原因及解决办法[^4]。 ```java try { int[] numbers = {1, 2}; System.out.println(numbers[3]); // 将抛出 ArrayIndexOutOfBoundsException } catch (ArrayIndexOutOfBoundsException e) { System.err.println("捕获到数组越界异常:" + e.getMessage()); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值