字符串连接 - 布尔硬编码的Vs与String的布尔连接

时间:2013-04-17 23:57:42

标签: java .net jvm clr

我需要一个建议(在java和.net中)以获取以下代码。

 public void method(bool value)
 {
     String someString;

     //some code

     if (value)
     {
          //some code
          ...
         someString = "one" + value;              
     }
     else
     {
         //some code
         ...
         someString = "two" + value;
     }

 }

哪一个是可取的,为什么?像上面的代码或像

这样的代码
someString = "onetrue";
someString = "twofalse";

3 个答案:

答案 0 :(得分:1)

在JDK编译和优化之后,method将如下所示:

public static String method(boolean value) {
    String someString;

    if (value) {
        StringBuilder sb = new StringBuilder();
        sb.append("one");
        sb.append(value);
        someString = sb.toString();
    } else {
        StringBuilder sb = new StringBuilder();
        sb.append("two");
        sb.append(value);
        someString = sb.toString();
    }
    return someString;
}

如果非常频繁地调用此代码,则与第二个版本相比,它可能会对性能产生影响。在每种情况下,都会构造一个新的StringBuilder,并在其上调用三个方法。在调用append之前,应将boolean转换为对象。在第二个版本中,我们只返回常量。一切都取决于调用此代码的频率。

答案 1 :(得分:0)

两者都没有任何区别,纯粹的风格。

因为你有// some other code我只是坚持第一个。如果你在每个分支中只有一行,那么两者都可以。

答案 2 :(得分:0)

在较高的水平,它们都是相同的,但如果你低头看下面的水平,我会建议使用这个方法:

someString = "onetrue";

someString = "twofalse";

这是因为当你执行“one”+值时,该值实际上是一个bool,并且将调用bool对象的toString()方法来添加到字符串中。基本上只是添加另一个步骤,而不是只指定要添加到字符串的内容。