廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder
字符串操作过程中,每次用 + 拼接字符串,有以下问题:
- 每次循环都会创建新的对象
- 绝大部分都是临时对象。浪费内存
- 影响GC效率
String s = "";
for(int i=0;i<1000;i++){
s = s +String.valueOf(i);
}
System.out.println(s);
为了解决这个问题,Java提供了StringBuilder类,可以高效的拼接字符串
1.StringBuffer类
- StringBuilder是可变对象
- StringBuilder可以预分配缓冲区
StringBuilder sb = new StringBuilder(1024);
for (int i=0;i<1000;i++){
sb.append(String.valueOf(i));
}
String s = sb.toString();
2.StringBuilder可以进行链式操作
String name = "Green";
StringBuilder sb = new StringBuilder(1024);
String s = sb.append("Mr ").append(name)
.append("!").insert(0,"Hello,")
.toString();
System.out.println(s);

不需要特别改写字符串 + 操作
编译器在内部自动把多个连续的 + 操作优化为StringBuilder操作
3.StringBuffer:
- StringBuilder和StringBuffer接口完全相同
- StringBuffer是StringBuilder的线程安全版本
- 跨线程做字符串很少见,因此没有必要使用StringBuffer
4.总结
- StringBuilder是可变对象,用来高效拼接字符串
- StringBuilder可以支持链式操作
- 实现链式操作的关键是返回实例本身
- StringBuffer是StringBuilder的线程安全版本,很少使用
廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder的更多相关文章
- 廖雪峰Java2面向对象编程-6Java核心类-3包装类型
Java的数据类型: 基本类型:int boolean float 引用类型:所有class类型 为一个基本类型int赋值为null,会提示"incompatible types" ...
- 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码
Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...
- 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类
1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...
- 廖雪峰Java2面向对象编程-6Java核心类-5枚举类
直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...
- 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean
1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...
- 廖雪峰Java2面向对象编程-3继承和多态-1继承
1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...
- 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础
1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...
- 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar
1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-2接口
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...
随机推荐
- Wood Chipping Text Animation
Blender Tutorial: Wood Chipping Text Animationhttps://www.youtube.com/watch?v=YFmN7eTNfNw 文字建模 木板建模, ...
- 使用JQuery反向选择checkbox
HTML代码: <input id="haspda" type="checkbox" name="haspda" value=&quo ...
- 手把手教你用MATLAB画灰度直方图
hist =[1,2,3,4,5,6,7,8,7,6,5,4,3,2,1] %15个元素 这个行矩阵(数组)输入到命令行 bar(hist) 用列矩阵也行 hist_im=imhis ...
- Eclipse工具的设置
1 Eclipse的工作空间和新建工程1.1: 工作空间* 其实就是我们写的源代码所在的目录 1.2: 创建工程(项目)* 右键/Package Explore 空白区/new /Java Proje ...
- Stream Processing 101: From SQL to Streaming SQL in 10 Minutes
转自:https://wso2.com/library/articles/2018/02/stream-processing-101-from-sql-to-streaming-sql-in-ten- ...
- 【网络协议】TCP分段与IP分片
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/30109789 我们在学习TCP/IP ...
- 运行Scrapy项目提示“import win32api ImportError: DLL load failed: 找不到指定的模块。”
安装完成Scrapy时候,终端导入Scrapy时候,发现没有任何报错,但是在运行Scrapy的项目的时候提示“import win32api ImportError: DLL load failed: ...
- LOJ 2737 「JOISC 2016 Day 3」电报 ——思路+基环树DP
题目:https://loj.ac/problem/2737 相连的关系形成若干环 / 内向基环树 .如果不是只有一个环的话,就得断开一些边使得图变成若干链.边的边权是以它为出边的点的点权. 基环树的 ...
- 代码问题: 【ADNet】
[ADNet]: Yoo S, Yun K, Choi J Y. Action-Decision Networks for Visual Tracking with Deep Reinforcemen ...
- ORACLE SQL Developer日期显示格式不全
如下图,只有月-日-年,不能完整显示小时,分,秒 解决方法: 工具->首选项->数据库->NLS->日期格式: DD-MON-RR 修改为: YYYY-MM-DD HH24:M ...