Heim >Java >JavaBase >Wissen Sie in Java, was String mit „+' macht?

Wissen Sie in Java, was String mit „+' macht?

coldplay.xixi
coldplay.xixinach vorne
2020-09-14 13:51:322086Durchsuche

Wissen Sie in Java, was String mit „+' macht?

Verwandte Lernempfehlungen: Java Basic Tutorial

Es gibt einen einfachen Code

public class StringPlusTest{
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = "bbb";
        String s = "ccc" +s1 + s2 +"ddd";
    }}

Verwenden Sie javap -c .StringPlusTest.class, um

Compiled from "StringPlusTest.java"public class com.epoint.codetuning.test.StringPlusTest {
  public com.epoint.codetuning.test.StringPlusTest();
    Code:
       0: aload_0       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String aaa
       2: astore_1       3: ldc           #3                  // String bbb
       5: astore_2       6: new           #4                  // class java/lang/StringBuilder
       9: dup      10: invokespecial #5                  // Method java/lang/StringBuilder."<init>":()V
      13: ldc           #6                  // String ccc
      15: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      18: aload_1      19: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      22: aload_2      23: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      26: ldc           #8                  // String ddd
      28: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      31: invokevirtual #9                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      34: astore_3      35: return}

zu erhalten JVM-Bedienungsanleitung

Für Java sollte dieser Code im Prinzip lauten:

ldc 把常量池中的项压入栈
astore_1 将引用类型或returnAddress类型值存入局部变量1
astore_2 将引用类型或returnAddress类型值存入局部变量2
new 创建一个新对象
dup 复制栈顶部一个字长内容
invokespecial 根据编译时类型来调用实例方法
aload_1 从局部变量1中装载引用类型值
aload_2 从局部变量2中装载引用类型值
astore_3 将引用类型或returnAddress类型值存入局部变量3

Es ​​ist ersichtlich, dass das Implementierungsprinzip der Verwendung von „+“ zum Zusammenfügen von Zeichenfolgen in Java darin besteht, ein temporäres StringBuilder-Objekt zu erstellen und die Methoden append und toString aufzurufen.

Einige Änderungen am obigen Code vorgenommen

public class StringPlusTest{
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = "bbb";
        String s = new StringBuilder().append("ccc").append(s1).append(s2).append("ddd").toString();
    }}

Was ist das Ergebnis?

Folgendes kann durch Ausführen erhalten werden:

public class StringPlusTest{
    public static void main(String[] args) {
        String s1 = "aaa";
        String s2 = null;
        String s = "ccc" +s1 + s2 +"ddd";
        System.out.println(s);
    }}

Zeigen Sie den StringBuilder-Quellcode an

cccaaanullddd

Diese Methode ruft die Methode auf, die die übergeordnete Klasse AbstractStringBuilder erbt, und geht dann zur übergeordneten Klasse, um sie anzuzeigen

@Overridepublic StringBuilder append(String str) {
    super.append(str);
    return this;}

Die Methode appendNull bedeutet einfach Kapazität + 4, Anhängen einer Nullzeichenfolge.

Das Ergebnis ist also „cccaaanullddd“.

Wenn Sie mehr über das Erlernen des Programmierens erfahren möchten, achten Sie bitte auf die Spalte „PHP-Schulung“!

Das obige ist der detaillierte Inhalt vonWissen Sie in Java, was String mit „+' macht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen