Concat an integer to a String - use String literal or primitive from performance and memory point of view?

前端 未结 5 1479
夕颜
夕颜 2020-12-17 19:34

Option 1:

String newStr = someStr + 3 + \"]\";

Option 2:

String newStr = someStr + \"3\" + \"]\";

Which o

5条回答
  •  再見小時候
    2020-12-17 19:43

    The first will become:

    StringBuilder sb = new StringBuilder (String.valueOf (someStr));
    sb.append (3);
    sb.append ("]");
    String newStr = sb.toString ();
    

    the second will become:

    StringBuilder sb = new StringBuilder (String.valueOf (someStr));
    sb.append ("3");
    sb.append ("]");
    String newStr = sb.toString ();
    

    Here is disassembly:

    public String foo (String someStr)
    {
        String newStr = someStr + 3 + "]";
        return newStr;
    }
    
    public String bar (String someStr)
    {
        String newStr = someStr + "3" + "]";
        return newStr;
    }
    
    public java.lang.String foo(java.lang.String);
    Code:
       0: new           #16                 // class java/lang/StringBuilder
       3: dup
       4: aload_1
       5: invokestatic  #18                 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
       8: invokespecial #24                 // Method java/lang/StringBuilder."":(Ljava/lang/String;)V
      11: iconst_3
      12: invokevirtual #27                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      15: ldc           #31                 // String ]
      17: invokevirtual #33                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: invokevirtual #36                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      23: astore_2
      24: aload_2
      25: areturn
    
    public java.lang.String bar(java.lang.String);
    Code:
       0: new           #16                 // class java/lang/StringBuilder
       3: dup
       4: aload_1
       5: invokestatic  #18                 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
       8: invokespecial #24                 // Method java/lang/StringBuilder."":(Ljava/lang/String;)V
      11: ldc           #44                 // String 3
      13: invokevirtual #33                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      16: ldc           #31                 // String ]
      18: invokevirtual #33                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      21: invokevirtual #36                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      24: astore_2
      25: aload_2
      26: areturn
    

提交回复
热议问题