java中StringBuffer与String、StringBuilder的区别
在java中我们经常可以看到StringBuffer和String的用法,但是我自己在使用过程中,经常会将两者弄混淆,今天我们就来了解一下两者的区别:
我们首先来看一下我们的官方API中的简单介绍:
A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, but the length and content of the sequence can be changed through certain method calls.
官方文档中介绍:StringBuffer 和String在很多时候都是相似的。但是StringBuffer有个最明显的特征:synchronized
The principal operations on a StringBuffer are the append and insert methods, which are overloaded so as to accept data of any type.
StringBuffer中最主要的方法为Append 和Insert方法。
StringBuffer在追加字符串,删除字符串,插入字符方面的速度优于String。
最主要的区别:
对于StringBuffer对象的每次修改都会改变对象自身
String first = "bei";
String second = "jing";
StringBuffer sb = new StringBuffer(first);
StringBuffer sb2 = sb;
sb2.append(second);
System.out.println(sb2); //beijing
System.out.println(sb.equals(sb2)); //true
1:StringBuffer对象的初始化
StringBuffer sBuffer = new StringBuffer("shanghai");
利用给定的方法来初始化buffer对象
StringBuffer 和String之间不能直接转化,下面的代码会提示错误。
StringBuffer sb3 = "nanjing";
当然,两者可以互相转化的,比如:
StringBuffer sBuffer = new StringBuffer("shanghai"); //String转化为buffer对象
String add = sBuffer.toString(); //buffer对象转化成String类型
2:追加字符串
sb.append(String str)
在后面追加字符串
String second = "jing";
StringBuffer sb = new StringBuffer("bei");
sb.append(second); //beijing
3:删除字符
StringBuffer sb = new StringBuffer("beijing");
sb.delete(0, 1); //eijing (左闭右开)
删除特定下标的字符:
StringBuffer sb = new StringBuffer("beijing");
sb.deleteCharAt(1) //bijing
3:插入字符
StringBuffer.insert(int offset, String str)
offset : 表示插入字符的位置
str:插入的字符串
StringBuffer sb = new StringBuffer("beijing");
sb.insert(0, "go to "); //go to beijing
4:倒转字符串
StringBuffer sb = new StringBuffer("beijing");
System.out.println(sb.reverse()); //gnijieb
5:修改某一个特定位置的字符
StringBuffer sb = new StringBuffer("beijing");
sb.setCharAt(0, 'B'); //Beijing
回到最开始的标题部分那么StringBuffer和StringBuilder有什么区别呢?
两者的功能基本一样,都是适合与可操作性的,唯一的区别在StringBuffer is synchronized(同步)。
StringBuilder is notsynchronized。在速度方面StringBuilder速度远远快于StringBuilder.
因此,一般情况下,我们都用StringBuilder代替StringBuffer.
----------------------------------------------------官方API介绍----------------------------------------------------------------------、
This class has been supplemented with an equivalent class designed for use by a single thread, StringBuilder. The StringBuilder class should generally be used in preference to this one, as it supports all of the same operations but it is faster, as it performs no synchronization.
-------------------------------------------------------完结-------------------------------------------------------
java中StringBuffer与String、StringBuilder的区别的更多相关文章
- String、StringBuffer、与StringBuilder的区别
转载自博客园,原文链接:String.StringBuffer.与StringBuilder的区别 相信大家都知道StringBuffer.StringBuilder,但是这两个的用法都差不多,到底有 ...
- Java基础-StringBuffer类与StringBuilder类简介
Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例 原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...
- java中的sleep()和wait()的区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...
- java中的this与super的区别
java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...
- JAVA中extends 与implements有啥区别?
JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...
- Java中InputStream和String之间的转化
https://blog.csdn.net/lmy86263/article/details/60479350 在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转 ...
- Java中instanceof和isInstance的具体区别
Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...
- java中如何将string 转化成long
1.Java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int ...
随机推荐
- crontab 设置服务器定期执行备份工作
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...
- Android-多线程和进程
http://www.cnblogs.com/plokmju/p/android_ProcessOrThread.html 对于单线程模型,Android有两个规则: 不能阻塞UI线程 不能在工作线程 ...
- Office - InfoPath
1. 移除隐藏空间后剩余的空白: http://social.technet.microsoft.com/Forums/sharepoint/zh-TW/3dea3014-f808-428b-b283 ...
- spring-springmvc code-based
idea设置maven在下载依赖的同时把对应的源码下载过来.图0: 1 主要实现零配置来完成springMVC环境搭建,当然现在有了springBoot也是零配置,但是很多同仁都是从spring3.x ...
- Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止
就这段时间,很多人在抱怨为什么自己的MySQL又打不开问题. 就“Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止”这个问题,我想到了几种方案解决: 一.首 ...
- scrollview的总结
今天主要是学习了cocos2dx的scrollview的内容,把简单的菜单滑动表现做出来了.像很多游戏的下方有一槽功能按钮,角色.背包.技能.帮助等,当宽度不足以全部显示出来的时候,隐藏一部分,以滑动 ...
- hdu-2841 Visible Trees---容斥定理
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2841 题目大意: N*M的格点上有树,从0,0点可以看到多少棵树. 解题思路: 发现如果A1/B1= ...
- iOS图像处理之Core Graphics和OpenGL ES初见
http://www.jianshu.com/p/f66a7ca326dd iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台 ...
- BZOJ2342:[SHOI2011]双倍回文(Manacher)
Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长 ...
- CF1063A Oh Those Palindromes
嘟嘟嘟 只要将每一种字母放一块输出就行了. 证明1:比如 1 2 3 4 5 6,那么这个序列对答案的贡献分别是1和5,2和4 ,3和6……如果重新排列成x x x x o o,会发现对 ...