Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将自定义方法转换为concat字符串vs不使用该方法_Java_Performance - Fatal编程技术网

Java 将自定义方法转换为concat字符串vs不使用该方法

Java 将自定义方法转换为concat字符串vs不使用该方法,java,performance,Java,Performance,我有这样一个代码: private static final String BR_TAG = "<br/>"; private ResourceBundle rb; public String create(){ String result = addLine("some text"); result = addLine("some text"); result = addLine("some text"); .... } public String a

我有这样一个代码:

private static final String BR_TAG = "<br/>";

private ResourceBundle rb;

public String create(){
   String result = addLine("some text");
   result = addLine("some text");
   result = addLine("some text");
   ....
}

public String addLine(String text){
    return rb.getString(text) + BR_TAG; 
}
String result = new LineBuilder()
    .addLine("Hello")
    .addLine("World")
    .addLine("Bye!")
    .build();
或者我可以考虑将StringBuilder传递给我的方法的第三个选项:

public String create(){
   StringBuilder sb = new StringBuilder();
   addLine("some text", sb);
   addLine("some text", sb);
   ....
}

public void addLine(String text, StringBuilder sb){
    sb.append(rb.getString(text)).append(BR_TAG); 
}

你认为哪种方法最好?

为什么不使用另一种方法

在我看来,就代码的美而言,两者都不是最好的。但就性能而言,第三个更好,因为当大量使用时,
StringBuilder
+
花费的时间更少

为了让你的代码看起来更漂亮,可以使用生成器模式吗

public class LineBuilder {
    private StringBuilder builder;
    private static final String BR_TAG = "<br/>";

    public LineBuilder() {
        builder = new StringBuilder();
    }

    public LineBuilder addLine(String text) {
        builder.append(text).append(BR_TAG);
        return this;
    }

    public String build() {
        return builder.toString();
    }
}

看起来好多了

根据您的第三个选项,
StringBuilder.apend()
不会返回
String
,它会返回
StringBuilder
的实例。与仅串联字符串相比,StringBuilder通常是更好的选项。您可能应该问自己:为什么我的Java代码中甚至有标记。通常最好将标记(HTML)与实际的源代码分开,因此考虑移动到JSP或其他形式的模板引擎。“我知道,SRY是快速复制粘贴;”@直到Helge你是对的,但我别无选择,我正在实现一些发送邮件的接口,这些接口要求返回包含邮件全部内容的字符串。@KamilRuszczyk没有任何东西阻止你将标记提取到某种形式的模板中并使用它。我确实意识到,公司的要求有时不允许使用干净的解决方案,但在这种情况下,这应该没有那么难但是发送邮件总是很“有趣”,所以祝你好运。
String result = new LineBuilder()
    .addLine("Hello")
    .addLine("World")
    .addLine("Bye!")
    .build();