Java语言有关字符串的类有三种

java.lang.String:一般作为简单字符串类型

java.lang.StringBuffer:字符串缓冲区

java.lang.StringBuider:字符串缓存区

介绍String、StringBuffer和StringBuilder这三者的区别:

1、这三个类的区别有两个方法,运行速度和线程安全。

  首先说运行速度也就是执行速度,在这方面的快慢为 StringBuilder > StringBuffer >String.

  String最慢的原因是:String为字符串的常量而StringBuilder和StringBuffer是字符串的变量,String一旦创建之后是不可更改的,而StringBuilder和StringBuffer是变量是可以更改的,示例如下:

String str = "abc";
system.out.println(str);
str = str + "df";
system.out.println(str);

  运行这段代码会发现先输出abc,然后输入的是abcdf,看似是把这个str对象给更改了,但是这只是一个种假象,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“df”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

另外,有时候我们会这样对字符串进行赋值

1 String str="abc"+"de";
2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
3 System.out.println(str);
4 System.out.println(stringBuilder.toString());

这样输出结果也是“abcde”和“abcde”,但是String的速度却比StringBuilder的反应速度要快很多,这是因为第1行中的操作和

String str="abcde";是完全一样的,所以会很快,而如果写成下面这种形式

1 String str1="abc";
2 String str2="de";
3 String str=str1+str2;

那么JVM就会像上面说的那样,不断的创建、回收对象来进行这个操作了。速度就会很慢。

2. 再来说线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

  如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

3. 总结一下

  String:适用于少量的字符串操作的情况

  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

字符串的字面量:

String str = "字符串" ;  //里面的“字符串”称为字面量

String str = new String(字符串);

----------------------下面是这三种类型的操作-----------------------

-----------String------------------

字符串String类型的操作有:

拼接、查找替换、长度、分隔、去掉首尾空格、大小写、比较等等。

字符串String类型——拼接:

第一种:使用“+”运算符进行拼接。

第二种:使用concat() 进行拼接。

字符串String类型——查找替换:

查找:indexOf()

替换:replace()

示例:

查找indexOf()显示的是字符串的位置,从0开始。

字符串string类型——长度:

直接调用length();

字符串String类型——去掉首尾空格:

直接调用trim() 方法

用了trim()方法的示例:

没用trim()方法的示例:

字符串String类型——大小写:

大写:toUpperCase()

小写:toLowerCase();

示例:

字符串String类型——分隔:

方法:split()

示例:

字符串String类型——比较

方法:equals()

 还有一个子字符串substring:

substring(int,int)

包括开始的位置的字符,不包括结束位置的字符

示例:

方法类型很多,可查看API。

--------------StringBuffer---------------

StringBuffer是创建的一个字符串的缓冲

例如:

----------------Stringbuilder---------------

看下图为什么,添加了字符串为什么不显示了,因为使用了setLength()这个方法,将缓冲设置为了0,就是说前面的都给缓冲掉了,所有没有数据的哦!

例子:

又给缓冲区设置成了1,为什么显示结果是一个1呢,是因为给缓冲区只设置了一个字符的位置,所有只显示了“123456789” 这一串数字里面的 1 。

StringBuilder和StringBuffer 的用法都差不多

Java—String,StringBuffer,StringBuilde区别和操作的更多相关文章

  1. java String, StringBuffer ,StringBulider 区别

    1. String 是不可变的(immutable): 创建后不能修改: 2. StringBuffer 线程安全的,可变字符串: 3. StringBuilder 线程不安全,所以性能比较高

  2. String,StringBuffer,StringBudilder区别--2019-04-13

    String,StringBuffer,StringBudilder区别: 1String 是字符串常量,创建内容不可以变, final修饰意味着String类型不能被继承,减少被修改的可能,从而最大 ...

  3. JAVA String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  4. Java中String/StringBuffer/StringBuilder区别(转)

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...

  5. String,StringBuffer,StringBuilder区别

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  6. Java String StringBuffer StringBuilder

    String  字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer  字符串变量  线程安全 在堆上创建,每次追加操作在原对象上进行操作:  速度 StringBuffer ...

  7. 转:String StringBuffer StringBuilder区别

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  8. String StringBuffer StringBuilder区别与联系

    java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder都是字符串类型,是Java中用于处理字符串常用的三个类.它们主要有以下区别 ...

  9. Java String, StringBuffer和StringBuilder实例

    1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...

随机推荐

  1. Java中的容器类(List,Set,Map,Queue)

    Java中的容器类(List,Set,Map,Queue) 一.基本概念 Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: 1)Collection.一个独立元素的序列,这些元素都 ...

  2. JavaScript语法对{}的奇葩处理

    JavaScript的语法有多坑,算是众人皆知了. 今天看到vczh的这条微博:http://weibo.com/1916825084/B7qUFpOKb , 代码如下: {} + []; [] + ...

  3. opencv的基本数据结构(二)(转)

    转自:原文链接,以下代码.图片.内容有点改动,只为转载不降低博客内容的可阅性,版权归原作者所有. OpenCV中强大的Mat类型大家已经比较熟悉了.这里梳理一些在工程中其他经常用到的几种基本数据类型. ...

  4. hdu 1495 非常可乐 (广搜)

    题目链接 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶 ...

  5. 【TortoiseSVN】windows中连接SVN服务器的工具

    1.下载安装包: 可以到我的服务器地址进行下载,有32和64位的安装包: http://qiaoliqiang.cn/fileDown/TortoiseSVN-1.8.8.25755-win32-sv ...

  6. DRM学习总结(1)--- DRM框架介绍

    一.DRM 简介 In computing, the Direct Rendering Manager (DRM), a subsystem of the Linux kernel, interfac ...

  7. docker 错误排查:无法进入容器.

    docker 错误排查:无法进入容器. #docker exec -it 3c1d bash rpc error: code = 2 desc = oci runtime error: exec fa ...

  8. iBt(001-004)原文与试译

    Unit 001 Basic building materials include: timber, mud, stone, marble, brick, tile, steel, and cemen ...

  9. Django Xadmin - 重构django admin

    一.Django admin的执行流程 https://www.cnblogs.com/weihengblog/p/9122509.html 我的博客,介绍了django admin执行流程 二.Xa ...

  10. 三、springcloud之服务调用Feign

    一.背景 项目中接口调用: Httpclient Okhttp Httpurlconnection RestTemplate 微服务提供了更简单,方便的Feign 二.Feign简介 Feign是一个 ...