java - 将整数连接到字符串 - 从性能和内存的角度来看,使用字符串文字还是原语?

标签 java string concatenation primitive

选项 1:

String newStr = someStr + 3 + "]";

选项 2:

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

哪个选项在性能、内存和一般实践方面更好? 我可以使用哪些推荐的工具/方法来测量我的代码的内存使用情况及其性能(除了测量开始时间和结束时间并计算差异之外)

最佳答案

第一个会变成:

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

第二个会变成:

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

这里是反汇编:

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."<init>":(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."<init>":(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

关于java - 将整数连接到字符串 - 从性能和内存的角度来看,使用字符串文字还是原语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782804/

相关文章:

java - 是否有非递归解决方案来获取字符串数组所有可能串联的列表?

java - openFileOutput : How to create files outside the/data/data. ...路径

java - 如何单独获得最小值和最大值而不是整体?

c# - 将 ByteArray 转换为 String 以在 TextBox c# 中使用

c# - 删除具有不同间距的重复字符串的最佳方法?

python - concat + groupby + 应用在 panda dataframe 的多列中

java - WindowBuilder 设计模式未显示我的 Widget 的视觉特征

java - vector 空间是多少?

java - 可转换为整数的字符串的哈希码

mysql - SQL 将 table2 的行连接到 table1 的列