当前位置: 首页 > 面试题库 >

将字符串串联到StringBuilder Java中

韩彬
2023-03-14
问题内容

我有一个旧的Java文件,该文件使用String串联来构建巨大的String对象。这是一个严重的性能问题。

String test="I am a very bad programmer"
+"to use concatenation"
+"Instead of StringBuilder"
+" or StringBuffer";

StringBuilder strBuilder= new StringBuilder();
strBuilder.append("I am a bad programmer");
strBuilder.append("to use concatenation");
strBuilder.append("Instead of StringBuilder");
strBuilder.append(" or StringBuffer");
String str= strBuilder.toString();

基本上我只需要在Java中存根即可将String实例化作为输入并转换为StringBuilder.Anybody曾经尝试过吗?


问题答案:

在您的示例中,固定文字比使用StringBuilder更有效。

固定文字将被编译器检测到并将被内联为单个值,因此这两行

String s = "one" + "two" + "three";

String s = "onetwothree";

将生成完全相同的字节码。

但是,如果串联不是通过文字而是通过函数调用完成的,则图片将有所不同。

当您需要动态追加字符串时,请使用StringBuilder而不是StringBuffer,因为它不同步,因此速度稍快。

这是示例字节码:

公共课测验
{
   private String s =“一个” +“两个” +“三个”;
}

公共课程Test2
{
   private String s2 =“ onetwothree”;
}

这些类生成的字节码为:

c:\ Temp> javap -c测试
从“ Test.java”编译
公共类Test扩展了java.lang.Object {
公共Test();
  码:
   0:加载_0
   1:调用特殊#1; //方法java / lang / Object。“” :()V
   4:aload_0
   5:lcd#2;//字符串onetwothree
   7:普特菲尔德#3;//字段s:Ljava / lang / String;
   10:返回
}
c:\ Temp> javap -c Test2
从“ Test2.java”编译
公共类Test2扩展了java.lang.Object {
公共Test2();
  码:
   0:加载_0
   1:调用特殊#1; //方法java / lang / Object。“” :()V
   4:aload_0
   5:lcd#2;//字符串onetwothree
   7:普特菲尔德#3;//字段s:Ljava / lang / String;
   10:返回
}

如您所见,两个变量的处理方式相同。

我认为这不属于语言规范,因为这“只是”编译器优化。

一个不同的编译器(我使用的是Sun编译器)可能在做完全不同的事情-只要行为不变就可以。



 类似资料:
  • 本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果

  • 问题内容: 我需要知道是否可以连接字符串,如下所示?如果没有,那么还有什么选择呢? 它应该看起来像人等。 您不能在串联中使用符号,那么替代方法是什么? 问题答案: 仅用于连接。而您错过了增量!

  • 问题内容: 以下语句, 产生输出。 但是,以下内容 产生。 区别在哪里? 问题答案: 您会因为操作符优先级和字符串转换的结合而看到此行为。 JLS 15.18.1 指出: 如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。 因此,第一个表达式中的右侧操作数将隐式转换为字符串: 但是对于第二个表达式,必须将复合赋值运算符与一起考虑。

  • 问题内容: 我正在从事Java代码优化。我不清楚或符号之间的区别: 第2行和第3行有什么区别? 问题答案: 这种方法使用StringBuilder创建结果字符串 此方法仅调用的静态方法来获取int的String版本 依次调用

  • 问题内容: 在Python中,什么时候以及什么时候使用字符串连接与字符串替换比较容易。由于字符串连接的性能有了很大的提高,这(成为更多)是一种风格上的决定,而不是一种实际的决定吗? 举一个具体的例子,如何处理灵活的URI: 编辑:也有关于加入字符串列表和使用命名替换的建议。这些是中心主题的变体,即在什么时候做正确的方法?感谢您的回复! 问题答案: 根据我的机器,连接的速度(明显)更快。但是从风格上

  • 有没有更简单的方法将列表中的字符串项串联成单个字符串?我可以使用函数吗? 例如。这是输入,这是所需的输出