1、String是字符串常量,StringBuffer和StringBuilder是字符串变量。

2、StringBuffer是线程安全的,StringBuilder是非线程安全的。

3、String是一个不可变的对象,每次修改String对象实际上是创新新对象,并将引用指向新对象。效率很低。

StringBuffer是可变的,即每次修改只是针对其本身,保证同步(synchronized),所以线程安全。StringBuffer使用时最好指定容量,这样会比不指定容量快30%-40%,甚至比不指定容量的StringBuilder还快。

StringBuilder没有实现同步,所以非线程安全,但效率应该比StringBuffer高。

String

1求字符串某一位置字符
publicchar charAt(int index)//返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1。

String str = new String("asdfzxc");

2获取角标

Int indexOf(char c) 例如:String s=”Java”; Int a=s.indexOf(a);

3判断

3.1:字符串是否包含某个字符串

boolean contains(str)//判断源字符串是否包含str字符串并返回boolean值

例如:Stringstr=”My love Java”;

Booleanb=str.contains(love);

结果:true

3.2:字符串是否有内容

boolean isEmpty() 例如:boolean b=str.isEmpty();

3.3:字符串是否以指定内容开始

boolean startsWith(str) 例如:boolean b=str.startsWith(“My”);

3.4:字符串是否以指定内容结束

boolean endsWith(str); 用法如上

3.5:判断内容是否相同

boolean equals(str) //String类重写了Object类中的equals方法,该方法用于判断字符串内容是否相同而非判断地址

例如: Stringstr1=”Java”;

Stringstr2=”love”;

booleans=str1.equals(str2);

3.6:判断内容是否相同,并忽略大小写

Boolean equalsIngoreCase(str) 用法同上

4提取子串
用String类的substring方法可以提取字符串中的子串,该方法有两种常用参数:
1)public String substring(int beginIndex)//该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回。
2)public String substring(int beginIndex, int endIndex)//该方法从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回

1 String str1 = new String("asdfzxc");
2 String str2 = str1.substring(2);//str2 = "dfzxc"
3 String str3 = str1.substring(2,5);//str3 = "dfz"

5字符串比较

1)public int compareTo(StringanotherString)//该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。

2)public int compareToIgnore(StringanotherString)//与compareTo方法相似,但忽略大小写。

3)public boolean equals(ObjectanotherObject)//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。

6字符串中字符的大小写转换
1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串

1 String str = new String("asDF");
2 String str1 = str.toLowerCase();//str1 = "asdf"
3 String str2 = str.toUpperCase();//str2 = "ASDF"

7字符串中字符的替换
1)public String replace(char oldChar, charnewChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
2)public String replaceFirst(String regex,String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
3)public String replaceAll(String regex,String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。

1 String str = "asdzxcasd";
2 String str1 = str.replace('a','g');//str1 = "gsdzxcgsd"
3 String str2 = str.replace("asd","fgh");//str2 = "fghzxcfgh"
4 String str3 = str.replaceFirst("asd","fgh");//str3 = "fghzxcasd"
5 String str4 = str.replaceAll("asd","fgh");//str4 = "fghzxcfgh"

字符串分隔
String[] split(String str)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。
1 String str = "asd!qwe|zxc#";
2 String[] str1 = str.split("!|#");//str1[0] = "asd";str1[1] = "qwe";str1[2] = "zxc";

8字符串与基本类型的转换
8.1、字符串转换为基本类型
java.lang包中有Byte、Short、Integer、Float、Double类的调用方法:
1)public static byte parseByte(String s)
2)public static short parseShort(String s)
3)public static short parseInt(String s)

字符串基本类型时,如int short dobule字符串中的数据一定要是数字,否则会出现异常
4)publicstatic long parseLong(String s)
5)publicstatic float parseFloat(String s)
6)publicstatic double parseDouble(String s)
例如:

1 int n = Integer.parseInt("12");
2 float f = Float.parseFloat("12.34");
3 double d = Double.parseDouble("1.124");

8.2基本类型转换为字符串类型
String类中提供了String valueOf()放法,用作基本类型转换为字符串类型。
1)static String valueOf(char data[])
2)static String valueOf(char data[], intoffset, int count)
3)static String valueOf(boolean b)
4)static String valueOf(char c)
5)static String valueOf(int i)
6)static String valueOf(long l)
7)static String valueOf(float f)
8)static String valueOf(double d)
例如:

1 String s1 = String.valueOf(12);
2 String s1 = String.valueOf(12.34);

9和数组有关的方法

返回类型 方法名作用 byte[] getBytes() 将一个字符串转换成字节数组char[] toCharArray() 将一个字符串转换成字符数组 String[]split(String) 将一个字符串按照指定内容劈开

isEmpty:判断是否为空

public boolean isEmpty()

当且仅当 length() 为 0 时返回 true。


StringBuffer

是说一个类似于String的字符串缓冲区

StringBuffer在任意时刻都有一个特定的字符串序列,不过这个序列和它的长度可以通过一些函数调用进行修改。

因此如果有几个线程同时操作StringBuffer,对它来说也只是一个操作序列,所有操作串行发生。每一个StringBuffer都有一个容量,如果内容的大小不超过容量,StringBuffer就不会分配更大容量的缓冲区;如果需要更大的容量,StringBuffer会自动增加容量。

StringBuffer继承了抽象类AbstractStringBuilder,在AbstractStringBuilder类中,有两个字段分别是char[]类型的value和int类型的count,也就是说,StringBuffer本质上是一个字符数组。value用来存储字符,而count表示数组中已有内容的大小,也就是长度。

参考StringBuffer详解 - CSDN博客

以下是 StringBuffer 类支持的主要方法:

StringBuffer 初始化,正确的示例:

StringBuffer s = new StringBuffer();//这样初始化出的StringBuffer对象是一个空的对象
StringBuffer s = new StringBuffer(“abc”);//这样初始化出的StringBuffer对象的内容就是字符串”abc”。

错误的示例(StringBuffer和String属于不同的类型,也不能直接进行强制类型转换):

StringBuffer s = “abc”; //赋值类型不匹配
StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转

StringBuffer对象和String对象之间的互转的代码如下:

String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1.toString(); //StringBuffer转换为String

常用方法分析

a、append方法

public StringBuffer append(boolean b)//在String中用+号连接字符串

该方法的作用是追加内容到当前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=“)
sb.append(user)
sb.append(“ and pwd=”)
sb.append(pwd);

这样对象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。

b、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”。

c、insert方法

public StringBuffer insert(int offset, boolean b)

该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,false);

该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。

d、reverse方法

public StringBuffer reverse()

该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();

经过反转以后,对象sb中的内容将变为”cba”。

e、setCharAt方法

public void setCharAt(int index, char ch)

该方法的作用是修改对象中索引值为index位置的字符为新的字符串。例如:

StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,’D’);

则对象sb的值将变成”aDc”。

f、trimToSize方法

public void trimToSize()

该方法的作用是将StringBuffer对象中的存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

总之,在实际使用时,String和StringBuffer各有优势和不足,可以根据具体的使用环境,选择对应的类型进行使用。

StringBuffer

StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。

StringBuilder类被设计成在不需要多线程安全的情况下替换StringBuffer类的。如果程序中不需要多线程安全,推荐使用StringBuilder类,因为没有了同步的操作而速度上比较快。

StringBuilder和StringBuffer一样,主要的操作有append和insert等

需要更多教程,微信扫码即可

String*Buffer*Builder理解相关推荐

  1. string 释放_由String,String Builder,String Buffer 引起的面试惨案

    前言 String,StringBuilder,StringBuffer的区别是啥?这个面试题估计每个JAVA都应该碰到过吧.依稀记得第一次面试的时候,面试官问我这个问题时,心想着能有啥区别不都是拼接 ...

  2. String、String Buffer、StringBuilder区别与比较

    类型 常量/变量 适用场景 性能 String 字符串常量 操作少量的数据   String Buffer 字符串变量(线程安全) 多线程操作大量数据 低 String Builder 字符串变量(非 ...

  3. ORA-06502:PL/SQL :numberic or value error: character string buffer too small

    今天遇到一个错误提示:ORA-06502:PL/SQL :numberic or value error: character string buffer too small,一般对应的中文信息为:O ...

  4. Java String 常量池理解

    Java String 常量池理解 String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以 ...

  5. java string string_深入理解Java:String

    在讲解String之前,我们先了解一下Java的内存结构. 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两 ...

  6. (转)Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解...

    原文:http://www.arm9home.net/read.php?tid-25938.html 管理提醒: 本帖被 xoom 执行加亮操作(2012-12-13) 如之前所说,一直想知道显示数据 ...

  7. Node JS Buffer使用理解

    JavaScript 起初为浏览器而设计,没有读取或操作二进制数据流的机制.Buffer类的引入,则让NodeJS拥有操作文件流或网络二进制流的能力. Buffer基本概念 Buffer 对象的内存分 ...

  8. c++11 string u8_深入理解C++11:C++11新

    一.数据对齐 在了解为什么数据需要对齐之前,我们可以回顾一下打印结构体的大小这个C/C++中的经典案例.先看代码: #include using namespace std; struct HowMa ...

  9. JAVA中String.intern的理解

    intern() 方法返回字符串对象的规范化表示形式. 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern ...

最新文章

  1. 纪录片 量子力学揭秘
  2. 理解并解决IE的内存泄漏方式[翻译2]
  3. 备忘-常用工具/网页
  4. java 递归 堆栈_尾递归函数仍在Java吹堆栈
  5. FONT Awesome 图标
  6. Spring事务管理介绍
  7. SQL Server文本和图像函数
  8. (转)Nginx反向代理设置 从80端口转向其他端口
  9. stm32串口接收不定长数据_基于STM32之UART串口通信协议--接收
  10. yjv是电缆还是电线_电力电缆载流量,都说有这一份最新汇总就够了
  11. connection timed out是什么意思_为什么Java中1000==1000为false而100==100为true?
  12. CloudStack 4.4学习总结之cloudstack-management安装
  13. 使用免费的Open NFC simulator模拟器在BlackBerry模拟器上进行NFC程序调试
  14. 利用python将图片版PDF转文字版PDF
  15. 计算机行业绩效管理,【计算机仿真论文】计算机信息系统在绩效管理中的应用(共4413字)...
  16. R485集线器定协议有多少种能否抗干扰?
  17. c语言写红绿灯程序,51单片机用C语言实现交通灯(红绿灯)源程序
  18. QGIS编译(跨平台编译)之三十九:QCA编译、QCA安装(Windows、Linux、MacOS环境下编译、安装)
  19. bat命令启动谷歌浏览器无痕模式
  20. python字符串加双引号是什么意思_python字符串表示什么?

热门文章

  1. 拼多多市值一夜蒸发759亿元,黄峥丝毫不慌...
  2. 金字火腿推出“人造牛排” 股价连日上涨接近历史高点
  3. 苹果要做第一个吃螃蟹的人!将率先尝试台积电5nm工艺
  4. 中兴天机Axon 10 Pro系列中国发布:售价3199元起
  5. 前端开发中的调试技巧
  6. mysql启动提示 access denied for user root@localhost(using password:YES) 解决办法总结
  7. 软件测试基础课程学习笔记4--测试用例设计方法技巧
  8. Unity中国张俊波:Unity的国际化、本土化、全球化 | 2019WISE超级进化者大会
  9. R语言chorolayer_R成精系列-R 错误汇总
  10. Android 7.0后 播放U盘中的视频文件的解决方案