StringBuilder的原理

String类
字符串是常量,它们的值在创建之后不能更改
字符串的底层是一个被final修饰的数组,不能改变
private final byte[] value; 进行字符串的相加,内存中就会多字符串,占用空间多,效率低下
如:
"a" + "b" + "c" = "abc" 相加之前
"a" "b" "c" 就有三个字符串了("a", "b", "c")
两个相加后
"ab" "c" 这里有一个新的字符串生成("ab")
三个相加后
"abc" 这里又有一个新的字符串生成("abc")
结论:
三个字符串相加,就有5个字符串占用空间,导致效率低下
StringBuilder类
字符串缓冲区,可以提高字符串的操作效率(可以看成是一个长度可以变化的字符串)
它的底层也是一个数组,但是没有个final修饰, 可以改变长度
byte[] value = new byte[16];
与String不同的是,StringBuilder能够对其中的字符串进行各种操作
StringBuilder的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。
如:
"a" + "b" + "c" = "abc"
这里可以直接在字符串的缓冲区操作字符串,数组长度默认是16,可随实质进行增长
结论:
StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。

StringBuilder的构造方法

说明

/**
* java.Lang.StringBuilder类 字符串緩冲区,可以提高字符串的效率
* 构造方法:
* StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
* StringBuilder(string str) 构造一个字符串生成器,并初始化为指定的字符串内容。
*/

代码理解

public class Demo01StringBuilder {
public static void main(String[] args) {
// 无参构造方法
StringBuilder stringBuilder1 = new StringBuilder(); // 加参构造方法
StringBuilder stringBuilder2 = new StringBuilder("我是有参数的构造方法"); System.out.println("stringBuilder1:" + stringBuilder1);
System.out.println("stringBuilder2:" + stringBuilder2);
}
}
输出结果:
stringBuilder1:
stringBuilder2:我是有参数的构造方法

StringBuilder常用的方法

append()方法

作用:添加任意类型数据的字符串形式,并返回当前对象自身

public class DemoStringBuilderAppend {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
System.out.println("添加之前stringBuilder:" + stringBuilder); stringBuilder.append("Cross Fire");
System.out.println("添加之后stringBuilder:" + stringBuilder);
}
}
输出结果:
添加之前stringBuilder:
添加之后stringBuilder:Cross Fire

toString()方法

说明:

/**
* StringBuilder和String可以相互转换
* string 转换为 StringBuilder:
* 可以使用 StringBuilder的构造方法StringBuilder( string str)构造一个字符串生成器,并初始化为指定的字符串内容。
* StringBuilder 转换为 string:
* 可以使用 StringBuilder中的 toString方法public String toString():将当前 StringBuilder对象转换为 string对象。
*/

代码理解:

public class DemoStringBuilderToString {
public static void main(String[] args) {
String string1 = "Hello";
System.out.println("string1:" + string1); // string 转换为 StringBuilder
StringBuilder stringBuilder = new StringBuilder(string1);
System.out.println("string 转换为 StringBuilder:" + stringBuilder); // StringBuilder 转换为 string
String string2 = stringBuilder.toString();
System.out.println("StringBuilder 转换为 string:" + string2);
}
}
输出结果:
string1:Hello
string 转换为 StringBuilder:Hello
StringBuilder 转换为 string:Hello

Java StringBuilder类的更多相关文章

  1. js封装的类似java StringBuilder类

    使用js的时候,经常会使用字符串拼接,但是在IE6和IE7没有对+作优化,所以性能会很低,鉴于此,我封装了StringBuilder类,用于拼接字符串,直接把代码贴出来如下: function Str ...

  2. learning java StringBuilder 类

    StringBuilder s1 = new StringBuilder(); s1.append("panzidong"); s1.insert(,"hong,&quo ...

  3. 【JAVA中String、StringBuffer、StringBuilder类的使用】

    一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: public class Strin ...

  4. java之StringBuilder类详解

    StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...

  5. Java基础——数组应用之StringBuilder类和StringBuffer类

    接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...

  6. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  7. Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

    1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...

  8. 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系

    在java中最常见的使用就是对字符串的操作:首先先说一下对字符串的理解:字符串就是一连串字符序列,Java提供了String和StringBuffer两个类来封装字符串,并提供一系列方法来操作字符串对 ...

  9. Java StringBuffer和StringBuilder类

    Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类. 和String类不同的是,StringBu ...

随机推荐

  1. java 集合之HashMap的三种遍历

    HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. 这周我们只需记住三种遍历方法 1.通过keySet()获取键,再利用hashmap里面的.get(key)方法通过键获取 ...

  2. 【codeforces 789A】Anastasia and pebbles

    [题目链接]:http://codeforces.com/contest/789/problem/A [题意] 有n种物品,每种物品有wi个; 你有两个口袋,每个口袋最多装k个物品; 且口袋里面只能装 ...

  3. css 百分比继承关系的探讨

    引入:近日在回顾css基础的时候发现了一个有趣的问题,就是css在继承百分比类属性的时候是继承百分比后再根据父级宽高计算,还是继承父级根据百分比计算过后的绝对值.下面举一个简单的例子来描述这一个问题, ...

  4. Js中“==”和“===”的区别

    从字面上来讲,‘==’代表相等,‘===’代表严格相等. 具体来讲,比较过程如下: 比较过程: ‘==’:      1. 首先判断两个值的类型是否相同,如果相同,进行‘===’判断.      2. ...

  5. 关于Spring JavaWeb工程中的ContextRefreshedEvent事件

    在应用启动时,通常想在此时预加载一些资源,全局使用. Spring会在操作应用上下文时,使用ApplicationEventPublisher触发相关ApplicationContextEvent,我 ...

  6. 2018-8-10-win10-uwp-绑定-OneWay-无法使用

    title author date CreateTime categories win10 uwp 绑定 OneWay 无法使用 lindexi 2018-08-10 19:16:50 +0800 2 ...

  7. Sublime Text 安装中文、英文字体

    在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...

  8. P1015 高精度乘法

    题目描述 给你两个很大的正整数A和B,你需要计算他们的乘积. 输入格式 输入一行包含两个正整数A和B,以一个空格分隔(A和B的位数都不超过 \(10^4\)) 输出格式 输出一行包含一个整数,表示A和 ...

  9. Apache工具集

    commons-collections-3.2.jar 转自:http://www.open-open.com/lib/view/open1384437456993.html

  10. WNMP nginx+php5+mysql测试环境安装(Windows7)(二)

    3. 安装Zend Optimizer Zend Optimizer对那些在被最终执行之前由Run-Time Complier产生的代码进行优化,提高PHP应用程序的执行速度.一般情况下,执行使用Ze ...