关于spring:面试JAVA基础之SpringSpringBufferSpringbuilder有那些区别一

46次阅读

共计 869 个字符,预计需要花费 3 分钟才能阅读完成。

Spring

Spring 类是一个不可变类,对象一旦被创立后,这个对象中的字符序列是不可变的,直到这个对象被销毁。

留神:Spring a=”111″; a=”222″; 最终 a 的后果是 222。因为再次给 a 赋值时,并不是对堆中实例对象从新复制,而是生成了一个新的对象,并指向后者的实例对象,之前的对象任然存在,如果没有援用,则会被垃圾回收。

SpringBuffer

StringBuffer 对象则代表一个字符序列可变的字符串, 当一个 StringBuffer 被创立当前,通过 StringBuffer 提供的 append()、insert()、reverse()、setCharAt()、setLength() 等办法能够扭转这个字符串对象的字符序列。一旦通过 StringBuffer 生成了最终想要的字符串,就能够调用它的 toString() 办法将其转换为一个 String 对象。

留神:StringBuffer 对象是一个字符序列可变的字符串,它没有从新生成一个对象,而且在原来的对象中能够连贯新的字符串。

SpringBuilder

StringBuilder 类也代表可变字符串对象。实际上,StringBuilder 和 StringBuffer 根本类似,两个类的结构器和办法也基本相同。

不同的是:StringBuffer 是线程平安的,而 StringBuilder 则没有实现线程平安性能,所以性能略高。

StringBuffer 是如何实现线程平安的呢?
StringBuffer 类中的办法都增加了 synchronized 关键字,也就是给这个办法增加了一个锁,用来保障线程平安。
Java9 的改良
Java9 改良了字符串(包含 String、StringBuffer、StringBuilder)的实现。在 Java9 以前字符串采纳 char[] 数组来保留字符,因而字符串的每个字符占 2 字节;而 Java9 的字符串采纳 byte[] 数组再加一个 encoding-flag 字段来保留字符,因而字符串的每个字符只占 1 字节。

所以 Java9 的字符串更加节俭空间,字符串的性能办法也没有受到影响。

正文完
 0