一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
本文主要介绍String类、StringBuffer类、StringBuilder类的差别 :
一、概述
(一)String
字符串常量。可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作都会创建一个新的字符串对象。
(二)StringBuffer
字符串可变量,是线程安全的,和StringBuilder类提供的方法全然同样。
差别在于StringBuffer每一个方法中前面加入了"synchronized",保证其是线程安全的。
(三)StringBuilder
字符串可变量,是线程不安全的。
这个类是在JDK 5才開始增加的,是StringBuffer的单线程等价类。(String和StringBuffer类都是JDK 1.0開始)
二、主要方法:
java API提供了处理字符串的绝大多数方法,在敲代码的时候假设须要处理字符串。一定要先查找API。
(一)String
字符串基本操作。具体请參见《String类》
(二)StringBuffer
与String类的方法类似。具体请參见《StringBuffer Member》
主要用来处理常常变动的字符串。最多的方法是append、insert和delete方法。
(三)StringBuilder
与StringBuffer类全然同样。具体请參见《StringBuilderClass》。
差别:StringBuffer每一个方法前都加入了synchronizedkeyword来保证线程的同步。
可是因为StringBuilder不运行同步操作。所以速度更快。
三、对照
(一)内存对照
下文主要採用图形的方式。对String与StringBuffer(同StringBuilder)进行对照(不同颜色代表不同的内存):
1、举例:运行加法操作a+b
![]()
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpamluZzIwMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
String的内存变化是:又一次开辟一块新的内存单元。然后把a丢进来。把b对进来。
然后Java中的垃圾回收机制,会自己主动回收原来的内存单元a、b
StringBuffer内存变化:直接把b加入在a的尾巴后面。不须要好从新开辟新的内存单元。Append方法
2、举例:在a中指定位置插入b
![]()
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpamluZzIwMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
(二)效率对照
因为String类是不可变的。每次对其改变都要创建新字符串对象。所以它是最慢的; StringBuilder不须要运行同步操作。速度要比StringBuffer快。
即运行改动操作的速度从高到低为:
StringBuilder > StringBuffer > String。
四、怎样选择
String是字符串常量,一旦创建就不能改动。StringBuffer和StringBuilder是字符串可变量,能够改动,可是StringBuffer是线程安全的,StringBuilder是线程不安全的。
选择方法:
假设非常少改动,使用String。毕竟它最简单;
假设常常改动,且是单线程,使用StringBuilder
假设常常改动,且是多线程,使用StringBuffer。
一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照的更多相关文章
- 解析Java中的String、StringBuilder、StringBuffer类(一)
引言 String 类及其相关的StringBuilder.StringBuffer 类在 Java 中的使用相当的多,在各个公司的面试中也是必不可少的.因此,在本周,我打算花费一些时间来认真的研读一 ...
- 7.算法竞赛中的常用JAVA API :String 、StringBuilder、StringBuffer常用方法和区别(转载)
7.算法竞赛中的常用JAVA API :String .StringBuilder.StringBuffer常用方法和区别 摘要 本文将介绍String.StringBuilder类的常用方法. 在j ...
- 探秘Java中的String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- 转发: 探秘Java中的String、StringBuilder以及StringBuffer
原文地址 探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家 ...
- 探秘Java中的String、StringBuilder以及StringBuffer(转载)
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...
- 【转】探秘Java中的String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一 ...
- String、StringBuilder和StringBuffer类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java 中的String、StringBuilder与StringBuffer的区别联系(转载)
1 String 基础 想要了解一个类,最好的办法就是看这个类的源代码,String类源代码如下: public final class String implements java.io.Seria ...
- JAVA基础之——String、StringBuilder、StringBuffer区别和使用场景
本文主要讲解String.StringBuilder.StringBuffer区别和应用场景 本文以jdk1.8为例 1 String 操作过程:每次赋值时新建一个String对象. 2 String ...
随机推荐
- 洛谷——P3817 小A的糖果
https://www.luogu.org/problem/show?pid=3817 题目描述 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任 ...
- Android学习笔记之按键操作
我们如何和Android 程序来进行交互那份?来让 Android 程序产生相应的反应,我们不得不通过键盘事件.触摸事件.传感器事件等来实现. 键盘是Android中主要的输入设备,对按键的响应的处理 ...
- (三)unity4.6Ugui中文教程文档-------概要-UGUI Basic Layout
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unit ...
- (转) 25个必须记住的SSH命令
转自:http://www.cnblogs.com/weafer/archive/2011/06/10/2077852.html OpenSSH是SSH连接工具的免费版本.telnet,rlogin和 ...
- cordova android
Image.png Image.png http://www.jscss.cc/2016/10/18/cordova.html 装一个全局的cordova: 官网介绍:http://cordova.a ...
- 模拟登录QQ推断是否须要验证码
老生常谈的问题了,在模拟登录之前,推断是否须要验证码: https://ssl.ptlogin2.qq.com/check? uin=QQ号码&appid=1003903&js_ver ...
- swift项目第十天:网络请求工具类的封装
import UIKit /* 必须先导入头文件:import AFNetworking */ import AFNetworking //MARK:-0:定义枚举:以枚举定义请求网络的get和pos ...
- 嵌入式arm linux环境中gdb+gdbserver调试
一.前言嵌入式Linux系统中,应用开发过程中,很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序.采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采 ...
- squeeze() 函数——MATLAB
B=squeeze(A) 移除张量A的单一维,即返回和矩阵A元素相同,但所有单一维都移除的矩阵B,单一维是满足size(A,dim)=1的维. squeeze命令对二维数组是不起作用的; 如果A是一行 ...
- [PReact] Reduce the Size of a React App in Two Lines with preact-compat
Not every app is greenfield, and it would be a shame if existing React apps could not benefit from t ...