我有一个旧的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: 编辑:也有关于加入字符串列表和使用命名替换的建议。这些是中心主题的变体,即在什么时候做正确的方法?感谢您的回复! 问题答案: 根据我的机器,连接的速度(明显)更快。但是从风格上
有没有更简单的方法将列表中的字符串项串联成单个字符串?我可以使用函数吗? 例如。这是输入,这是所需的输出