七七八八打印zi

Java基础(三):String、StringBuilder与S

2015-03-22  本文已影响505人  AlvinL

Java中有三种字符串类型:StringStringBuilderStringBuffer,那么它们之间有什么区别呢,又应该在怎样的场景中使用?

String

String是字符串常量,一旦创建之后就不可以改变其内容,即是immutable(不可变)的,其类的部分定义如下:

/** The value is used for character storage. */
private final char value[];

/** The offset is the first index of the storage that is used. */
private final int offset;

/** The count is the number of characters in the String. */
private final int count;

其中value[]是用来存储字符串的,被声明为final,因此只能赋值一次,之后不能再被修改。有些同学可能会问,String在赋值之后,是可以被重新赋值的啊,其实,它是创建一个新的String来实现的。如下代码:

public static void main(String[] args) 
{   
    String a = "hello";
    System.out.println(a.hashCode());
    a = "world";
    System.out.println(a.hashCode());
}

输出的两行结果不一样的,说明a被重新赋值之后,跟赋值前不是同一个对象。

StringBuffer

StringBufferString区别是,前者是可变的,是字符串变量,而且,StringBuffer是线程安全的。如果需要频繁修改字符串内容,就可以使用StringBuffer
StringBuffer 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

StringBuilder

StringBuilder也是一个字符串变量,但它是非线程安全的。这个类是在JDK5.0新增的,它是设计作为StringBuffer的一个简易替换,用于单线程使用的情况(很普遍)。由于它是非线程安全,因此在效率上是快于线程安全的StringBuffer

三者区别

使用场景

上一篇下一篇

猜你喜欢

热点阅读