分享:SringBuffer与String的区别
·作为Java中最为基础的部分,在Java的学习过程中,就一定会学习到字符串,其中String类作为字符串。并且在Java所有的程序中是使用字符串都是使用String类去实现。
两者存在一定的通性,都是可以储存和操作字符串,即包含多个字符的字符串数据。
但是StringBuffer与Sting的区别在哪里?
下面将讲述Sting与StringBuffer最为关键的区别之处在哪里?
1、从字符串的内容是否可以被修改上
String:字符串作为常量;则有一个这样的通性,它们的值在创建之后不能更改。在字符串的数组中,String对象是不可以改变的,这是因为存在这样的缺点也是具有一个与众不同的有点,编译器可以把字符串设立为共享。
下面是String的表达式:
String str = "abc";
等效于:
char data[] = {'a','b','c'};
String str = new String(data);
StringBuffer:StringBuffer类作为一个不同之处及优点在辅助类,可以在使用之前预先分配指定长度的内存块建立一个字符串缓冲区,这样的效益比String中需要每次都要开辟一个内存空间优于很多。StringBuffer是线程安全的,在多线程程序中也可以很方便去使用,但是相对于线程不安全的效率要稍低一点。
2、从对象本身的改变上
每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。
每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的。如以下的例子:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。
基于以上两点区别,在大部分情况下,StringBuffer > String
下面介绍一下StringBuffer中经常使用到的几种方法:
1、append方法
public StringBuffer append(boolean b)
该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.append(true);
则对象sb的值将变成”abctrue”。
使用该方法进行字符串的连接,将比String更加节约内容,例如应用于数据库SQL语句的连接,例如:
StringBuffer sb = new StringBuffer();
String user = “test”;
String pwd = “123”;
sb.append(“select * from userInfo where username=“)
.append(user)
.append(“ and pwd=”)
.append(pwd);
这样对象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。
2、deleteCharAt方法
public StringBuffer deleteCharAt(int index)
该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“Test”);
sb. deleteCharAt(1);
该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。
还存在一个功能类似的delete方法:
public StringBuffer delete(int start,int end)
该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);
该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。
3、insert方法
public StringBuffer insert(int offset, String s)
该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,“false”);
该示例代码的作用是在对象sb的索引值4的位置插入字符串false,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。
4、reverse方法
public StringBuffer reverse()
该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。
5、setCharAt方法
public void setCharAt(int index, char ch)
该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如:
StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,’D’);
则对象sb的值将变成”aDc”。
6、trimToSize方法
public void trimToSize()
该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
7、构造方法:
StringBuffer s0=new StringBuffer();分配了长16字节的字符缓冲区
StringBuffer s1=new StringBuffer(512);分配了512字节的字符缓冲区
8、获取字符串的长度: length()
StringBuffer s = new StringBuffer("www");
int i=s.length();
m.返回字符串的一部分值
substring(int start) //返回从start下标开始以后的字符串
substring(int start,int end) //返回从start到 end-1字符串
9.替换字符串
replace(int start,int end,String str)
s.replace(0,1,"qqq");
10.转换为不变字符串:toString()。
转载于:https://www.cnblogs.com/Zhuoshengda/p/7214264.html
分享:SringBuffer与String的区别相关推荐
- toString()与new String ()用法区别
toString()与new String ()用法区别 TestString.java package com.atguigu;import com.sun.org.apache.xerces.in ...
- Mysql 数据库默认值选 ‘‘“ 、Null和Empty String的区别
Mysql 数据库默认值选 ''" .Null和Empty String的区别 1:空值('')是不占用空间的 2: MySQL中的NULL其实是占用空间的.官方文档说明: "NU ...
- String直接赋字符串和new String的区别
1. String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String()和new Strin ...
- ToString()、Convert.ToString()、(string)、as string 的区别
通常 object 到 string 有四种方式(假设有object obj):obj.ToString().Convert.ToString().(string)obj.obj as string. ...
- C 风格字符串与C++中string类区别
1. 概述 字符串是若干个有效字符(字母.数字.专用字符.转义字符等)的序列.C语言中没有字符串变量,字符串不是存放在一个变量中,而是存放在一个字符型数组中.因此,为了存放字符串,常常在程序中定义字符 ...
- String和string的区别
最近老看见有人在论坛上问String和string有什么区别,答案五花八门差点儿没让我背过气去,干脆放到Blog上来,论坛上就贴地址了: 首先,在一般情况下,String和string是一样的,但是他 ...
- StringBuffer/StringBuilder/String的区别
1.在执行速度上:Stringbuilder->Stringbuffer->String 2.String是字符串常量 Stringbuffer是字符串变量 Stringbuilder是字 ...
- 浅谈String str = ““ 和 new String()的区别
关于String类的知识经常出现在面试题中,在此先记录自己的理解. 首先明白一个事,java存在一个常量池,可以用来存储字符串常量. 1 创建的字符串变量在内存中的区别 两者看似都是创建了一个字符串对 ...
- C#语法中String与string的区别
String与string从没有语法角度来看没有区别,可以互换 从使用习惯的角度可以做如下区分 string是C#语法的保留字,String不是 string一般作为变量类型使用,String一般作为 ...
最新文章
- stl如果开o2_如何自己写一个STL(上)
- QT的QMimeDatabase类的使用
- mysql错误:file xxx conflicts with file from package mysql-libs-5.5.68-1.el7.x86_64
- JUC锁-互斥锁ReentrantLock(二)
- mysql ndb 关闭_Mysql NDB 常见问题
- qt中使窗口的大小随窗口的内容大小进行调整
- Realsense D435i 运行 Vins-fusion
- python--编码问题
- Volley的原理解析
- 计算机视觉实战(五)图像梯度计算
- blend 自定义控件
- linux 新唐 STM32,新唐M0系列stm32单片机哪个便宜?
- 著名的php项目,PHP著名开源项目汇总
- MySQL数据库中数据完整性_MySQL数据完整性详细讲解及实现方式
- Java查找算法-17-二分查找
- adb关闭手机系统自动更新
- 合租服务器禁用 fsockopen 函数,部分程序不正常的解决办法。
- 理解矩阵和特征向量的本质
- 2022茶艺师(中级)特种作业证考试题库及答案
- 【异常检测】恶意软件检测:MaMaDroid (DNSS 2017)
热门文章
- java中char占的二进制,java数据类型与二进制详细介绍
- CODING 2.0 企业级持续交付解决方案
- Machine Learning-Introduction
- Google 修补多项 Android 高危漏洞
- Elasticsearch 7.0中引入的新集群协调子系统如何使用?
- 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)...
- RabbitMQ学习总结(4)——分发任务在多个工作者之间实例教程
- 让你大脑变冷静的28句英文
- php实现 三角形_PHP使用for循环输出三角形
- 玩转OpenVswitch 简介