资讯专栏INFORMATION COLUMN

java学习(六) —— java中String和StringBuffer的区别

Paul_King / 510人阅读

摘要:中有三个类可以对字符进行操作是进行单个字符操作的类。类中的方法偏重于对字符串的变化,例如追加插入和删除等,这个也是和类的主要区别。类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。

前言

String和StringBuffer都是java中关于字符操作的类

尤其String,经常看到类似这样的赋值代码 String str = "Hello World",看起来就好像int一样以为是java的基本数据类型,其实不是,String是一个类,是一个特殊的类,可以像基本数据类型一样直接赋值。

java中有三个类可以对字符进行操作:

(1)Character 是进行单个字符操作的类。
(2)String 对一串字符进行操作的不可变类。
(3)StringBuffer 也是对一串字符进行操作,但是可变类。

Java中String和StringBuffer类区别

StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值,其实是两个对象。

String是对象,不是原始类型;为不可变对象,一旦被创建,就不能修改其值。

对于已经存在的String对象的修改,实际上是重新创建一个新的对象,然后把新的值保存进去。

String是final类,不能被继承。

StringBuffer是一个可变对象,当对它修改的时候,不会像String那样重新建立对象,它只能通过构造函数来建立。对象被创立后,会分配内存空间,并初始保存一个null。向StringBuffer中赋值的时候,可以通过它的append方法:obj.append("hello");

字符串连接操作中StringBuffer的效率比String高。

如果程序中需要对字符串进行频繁的修改连接操作的话,使用StringBuffer性能会更高。

在String类中,没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个多带带字符,所以在JDK文档中称String类的对象是不可改变的。

然而,不可变的字符串具有一个很大的优点:编译器可以把字符串设置为共享的。

StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序执行效率相对来说就要稍微慢一些。

StringBuffer类中的方法偏重于对字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。

String与StringBuffer连接字符串比较

String str = new String("Hello World");str += "hello world"; 此字符串连接的处理过程:

(1)建立一个StringBuffer;
(2)调用append()方法;
(3)最后StringBuffer调用toString()给String重新赋值
(4)这样看来,String的连接操作,比StringBuffer多了一些操作,效率上就会打折扣。
(5)并且,由于String是不可变对象,每次重新赋值都会重新创建新的对象,那么原来的对象就没用了,就要被垃圾回收,也影响性能。

StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符,比String使用“+”操作符添加字符到一个已经存在的字符串后面有效率的多。

使用“+”操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无疑是一个非常消耗时间的操作。添加多个字符就意味着要一次又一次的的对字符串重新分配内存。使用StringBuffer就避免了这个问题。

参考链接

https://www.cnblogs.com/fguoz...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77018.html

相关文章

  • StringBuffer StringBuilder 3 个区别

    摘要:和它们都是可变的字符串,不过它们之间的区别是初中级面试出现几率十分高的一道题。区别线程安全线程安全,线程不安全。区别性能既然是线程安全的,它的所有公开方法都是同步的,是没有对方法加锁同步的,所以毫无疑问,的性能要远大于。 StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。这么简单的一道题,栈...

    ranwu 评论0 收藏0
  • Java学习笔记3-Number,String,StringBuilder类

    摘要:创建字符串教程字符串长度用于获取有关对象的信息的方法称为访问器方法。类在中被提出,它和之间的最大不同在于的方法不是线程安全的不能同步访问。然而在应用程序要求线程安全的情况下,则必须使用类。 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,...

    pkhope 评论0 收藏0
  • 这些Java面试题必须会-----鲁迅

    摘要:事实上,所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作。中可以通过设值注入方法注入和构造器注入实现,推荐使用的方式为设值注入。 写在前面 春天来了,万物复苏的季节到了. 许多程序猿安奈不住生理需求,我要涨工资,我要跳槽. 毕竟金三银四嘛. 那么要从众多的面试者中获得求职机会,我们就要面对很多的面试题. 程序猿是最烦面试题的.面试的公司也烦,面试的人也烦. 但是没办法.面试的人鱼龙混...

    aristark 评论0 收藏0
  • 为什么不建议在for循环使用"+"进行字符串拼接

    摘要:使用可以方便的对字符串进行拼接。该方法使用进行声明,说明是一个线程安全的方法。所以,阿里巴巴开发手册建议循环体内,字符串的连接方式,使用的方法进行扩展。但是,还要强调的是如果不是在循环体中进行字符串拼接的话,直接使用就好了。 摘要: 学习阿里巴巴Java开发手册。 原文:为什么阿里巴巴不建议在for循环中使用+进行字符串拼接 微信公众号:Hollis Fundebug经授权转载,...

    caoym 评论0 收藏0
  • 最最最常见Java面试题总结——第二周

    摘要:与都继承自类,在中也是使用字符数组保存字符串,,这两种对象都是可变的。采用字节码的好处语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性...

    yearsj 评论0 收藏0

发表评论

0条评论

Paul_King

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<