Home  >  Article  >  Java  >  Introduction to the differences between String, StringBuffer and StringBuilder in Java

Introduction to the differences between String, StringBuffer and StringBuilder in Java

高洛峰
高洛峰Original
2017-01-22 11:31:141575browse

String, StringBuffer, and StringBuilder in java are string classes that are often used in programming. The differences between them are also questions that are often asked in interviews. Now let’s summarize and see their differences and similarities.

1. Variable and Immutable

The String class uses a character array to save the string, as shown below. Because of the "final" modifier, you can know that the string object is immutable.

  private final char value[]; changing.

 Char[] value;

2. Is it multi-thread safe?

The objects in String are immutable and can be understood as constants, which is obviously thread-safe.

AbstractStringBuilder is the common parent class of StringBuilder and StringBuffer. It defines some basic operations of strings, such as expandCapacity, append, insert, indexOf and other public methods.

StringBuffer adds a synchronization lock to the method or adds a synchronization lock to the calling method, so it is thread-safe. Look at the following source code:

public synchronized StringBuffer reverse() {
    super.reverse();
    return this;
}
public int indexOf(String str) {
    return indexOf(str, 0);        //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}

StringBuilder does not add synchronization locks to the method, so it is not thread-safe.

3. What StringBuilder and StringBuffer have in common

StringBuilder and StringBuffer have a common parent class, AbstractStringBuilder (abstract class).

One of the differences between abstract classes and interfaces is that abstract classes can define some public methods of subclasses. Subclasses only need to add new functions and do not need to rewrite existing methods; while interfaces only need to add new functions. Declaration of methods and definition of constants.

The methods of StringBuilder and StringBuffer will call the public methods in AbstractStringBuilder, such as super.append(...). It's just that StringBuffer will add the synchronized keyword to the method for synchronization.

Finally, if the program is not multi-threaded, then using StringBuilder is more efficient than StringBuffer.

For more related articles introducing the differences between String, StringBuffer, and StringBuilder in Java, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn