[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/joywalk/toBeBetterJavaer/master/docs/string/join.md [Back]  [Original]

---
title: Java
shortTitle: Java
category:
  - Java
tag:
  - &
description: JavaJavaJava
head:
  - - meta
    - name: keywords
      content: Java,Java SE,Java,Java,Java,Java,Java,,java,String,,java,java string
---

# 4.9 

[Java ](https://tobebetterjavaer.com/pdf/ali-java-shouce.html) StringBuilder  `append()`  + 

[](https://tobebetterjavaer.com/string/builder-buffer.html)

PS

### javap +

+  Java +  Intellij IDEA 

```java
class Demo {
    public static void main(String[] args) {
        String chenmo = "";
        String wanger = "";
        System.out.println(chenmo + wanger);
    }
}
```

 Java 8  `javap -c Demo.class` 

```
Compiled from "Demo.java"
class Demo {
  Demo();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String 
       2: astore_1
       3: ldc           #3                  // String 
       5: astore_2
       6: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
       9: new           #5                  // class java/lang/StringBuilder
      12: dup
      13: invokespecial #6                  // Method java/lang/StringBuilder."":()V
      16: aload_1
      17: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: aload_2
      21: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      27: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      30: return
}
```

 new  class  `java/lang/StringBuilder` 9  StringBuilder 

 17  invokevirtual  StringBuilder  `append()` 

 chenmo"" StringBuilder 

 21  `append()`  wanger"" StringBuilder 

 Java 

```java
class Demo {
    public static void main(String[] args) {
        String chenmo = "";
        String wanger = "";
        System.out.println((new StringBuilder(chenmo)).append(wanger).toString());
    }
}
```

+ StringBuilder  `append()` 

 Java 9 Java 11 

 Java 11 

```
Compiled from "Demo.java"
public class com.itwanger.thirtyseven.Demo {
  public com.itwanger.thirtyseven.Demo();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String
       2: astore_1
       3: iconst_0
       4: istore_2
       5: iload_2
       6: bipush        10
       8: if_icmpge     41
      11: new           #3                  // class java/lang/String
      14: dup
      15: ldc           #4                  // String 
      17: invokespecial #5                  // Method java/lang/String."":(Ljava/lang/String;)V
      20: astore_3
      21: ldc           #6                  // String 
      23: astore        4
      25: aload_1
      26: aload_3
      27: aload         4
      29: invokedynamic #7,  0              // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
      34: astore_1
      35: iinc          2, 1
      38: goto          5
      41: return
}
```

 29  `invokedynamic`Bootstrap Method BSMBSM  CallSite  `invokedynamic`  `invokedynamic`  CallSite CallSite  MethodHandle holder `StringConcatFactory.makeConcatWithConstants()` 



 Java 9 JDK  +  Java 8 

###  StringBuilder.append

Java  StringBuilder  `append()`  +  +  StringBuilder  Java 

 StringBuilder  `append()` 

```java
class Demo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < 10; i++) {
            String chenmo = "";
            String wanger = "";
            sb.append(chenmo);
            sb.append(wanger);
        }
        System.out.println(sb);
    }
}
```



for +

```java
String result = "";
for (int i = 0; i < 100000; i++) {
    result += "";
}
```

for  StringBuilder `append()` 

```java
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
    sb.append("");
}
```



 6212  1 





### append

 StringBuilder  `append()` 

```java
public StringBuilder append(String str) {
    super.append(str);
    return this;
}
```

 3  AbstractStringBuilder  `append()` 

```java
public AbstractStringBuilder append(String str) {
    if (str == null)
        return appendNull();
    int len = str.length();
    ensureCapacityInternal(count + len);
    str.getChars(0, len, value, count);
    count += len;
    return this;
}
```

1 nullnull`appendNull()` 

```java
private AbstractStringBuilder appendNull() {
    int c = count;
    ensureCapacityInternal(c + 4);
    final char[] value = this.value;
    value[c++] = 'n';
    value[c++] = 'u';
    value[c++] = 'l';
    value[c++] = 'l';
    count = c;
    return this;
}
```

2

3`ensureCapacityInternal()` 

```java
private void ensureCapacityInternal(int minimumCapacity) {
    // overflow-conscious code
    if (minimumCapacity - value.length > 0) {
        value = Arrays.copyOf(value,
                newCapacity(minimumCapacity));
    }
}
```



 4 str  value 

```java
str.getChars(0, len, value, count)
```

5 count

### String.concat 

 + StringBuilder  `append()` 

 String  `concat()`  StringBuilder  `append()` 

```java
String chenmo = "";
String wanger = "";
System.out.println(chenmo.concat(wanger));
```

 `concat()` 

```java
public String concat(String str) {
    int otherLen = str.length();
    if (otherLen == 0) {
        return this;
    }
    int len = value.length;
    char buf[] = Arrays.copyOf(value, len + otherLen);
    str.getChars(buf, len);
    return new String(buf, true);
}
```

1 0

2 value  buf 

3 str  buf 



 `+` `concat()`  null  NullPointerException+ null null

"" concat , `new StringBuilder` 

`concat()` 





### String.join 

String  `join()`

```java
String chenmo = "";
String wanger = "";
String cmower = String.join("", chenmo, wanger);
System.out.println(cmower);
```



```java
String message = String.join("-", "", "", "");
```

`--`

 join 

```java
public static String join(CharSequence delimiter, CharSequence... elements) {
    Objects.requireNonNull(delimiter);
    Objects.requireNonNull(elements);
    // Number of elements not likely worth Arrays.stream overhead.
    StringJoiner joiner = new StringJoiner(delimiter);
    for (CharSequence cs: elements) {
        joiner.add(cs);
    }
    return joiner.toString();
}
```

 StringJoiner  for-each  `toString()`  String

### StringUtils.join 

`org.apache.commons.lang3.StringUtils`  `join()` 

```java
String chenmo = "";
String wanger = "";
StringUtils.join(chenmo, wanger);
```

 NullPointerException

```java
StringUtils.join(null)            = null
StringUtils.join([])              = ""
StringUtils.join([null])          = ""
StringUtils.join(["a", "b", "c"]) = "abc"
StringUtils.join([null, "", "a"]) = "a"
```



```java
public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
    if (array == null) {
        return null;
    }
    if (separator == null) {
        separator = EMPTY;
    }

    final StringBuilder buf = new StringBuilder(noOfItems * 16);

    for (int i = startIndex; i < endIndex; i++) {
        if (i > startIndex) {
            buf.append(separator);
        }
        if (array[i] != null) {
            buf.append(array[i]);
        }
    }
    return buf.toString();
}
```

 StringBuilder

 Java 9  + [](https://tobebetterjavaer.com/jvm/zijiema-zhiling.html)



---

JavaJVMJava **SpringNettyDubbo ** [2022PDF](https://tobebetterjavaer.com/pdf/programmer-111.html)

 ****  **111** 

![](https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)

Web Proxy Viewer  |  New URL  |  Original Page