添加一个空字符串vs toString-为什么不好?

corgrath:

根据工具PMD,以下是一种不好的做法:

String s = "" + 123; // bad 
String t = Integer.toString(456); // ok 


This is an inefficient way to convert any type to a `String`.

为什么做一件坏事?

堆垛机:
String s = "" + 123; // bad     
String t = Integer.toString(456);

将被编译为:

String s = "123";
String t = Integer.toString(456);

所以:“” +123明显好一点!JAD核对

public static void main(String args[])
{
//    0    0:ldc1            #16  <String "123">
//    1    2:astore_1
//    2    3:sipush          456
//    3    6:invokestatic    #18  <Method String Integer.toString(int)>
//    4    9:astore_2
//    5   10:getstatic       #24  <Field PrintStream System.out>
//    6   13:new             #30  <Class StringBuilder>
//    7   16:dup
//    8   17:aload_1
//    9   18:invokestatic    #32  <Method String String.valueOf(Object)>
//   10   21:invokespecial   #38  <Method void StringBuilder(String)>
//   11   24:aload_2
//   12   25:invokevirtual   #41  <Method StringBuilder StringBuilder.append(String)>
//   13   28:invokevirtual   #45  <Method String StringBuilder.toString()>
//   14   31:invokevirtual   #48  <Method void PrintStream.println(String)>
//   15   34:return
}

编辑:

对于非恒定值:

int i = 123;
String s = (new StringBuilder()).append(i).toString();
String t = Integer.toString(i);
System.out.println((new StringBuilder(String.valueOf(s))).append(t).toString());

    public static void main(String args[])
    {
    //    0    0:bipush          123
    //    1    2:istore_1
    //    2    3:new             #16  <Class StringBuilder>
    //    3    6:dup
    //    4    7:invokespecial   #18  <Method void StringBuilder()>
    //    5   10:iload_1
    //    6   11:invokevirtual   #19  <Method StringBuilder StringBuilder.append(int)>
    //    7   14:invokevirtual   #23  <Method String StringBuilder.toString()>
    //    8   17:astore_2
    //    9   18:iload_1
    //   10   19:invokestatic    #27  <Method String Integer.toString(int)>
    //   11   22:astore_3
    //   12   23:getstatic       #32  <Field PrintStream System.out>
    //   13   26:new             #16  <Class StringBuilder>
    //   14   29:dup
    //   15   30:aload_2
    //   16   31:invokestatic    #38  <Method String String.valueOf(Object)>
    //   17   34:invokespecial   #44  <Method void StringBuilder(String)>
    //   18   37:aload_3
    //   19   38:invokevirtual   #47  <Method StringBuilder StringBuilder.append(String)>
    //   20   41:invokevirtual   #23  <Method String StringBuilder.toString()>
    //   21   44:invokevirtual   #50  <Method void PrintStream.println(String)>
    //   22   47:return
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么0.ToString(“#。##”)返回一个空字符串而不是0.00或至少为0?

为什么我的所有EditText.getText()。toString()返回一个空字符串?

为什么PHP将“ \ r \ n”添加到一个空字符串?

为什么null语句ToString()返回空字符串?

.ToString()从StringBuilder创建一个新字符串,那么为什么不直接使用字符串呢?

为什么字符串对象实例化是一个不好的做法?

为什么连接两个空字符串会导致一个空字符串?

为什么连接空字符串有效但不调用“ null.ToString()”有效吗?

当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

Groovy:为什么按空格split()对一个空字符串进行返回会返回一个空字符串的列表?

为什么我对WinGetTitle的调用返回一个空字符串?

为什么 req.query.code 返回一个空字符串?

为什么此请求返回一个空字符串?

为什么nextLine()返回一个空字符串?

为什么 Promise 返回一个空字符串?

为什么我的函数返回一个空字符串?

为什么json_encode返回一个空字符串

为什么我从 jquery find().text() 得到一个空字符串?

为什么我的密码字段的值总是一个空字符串?

为什么element.style.backgroundColor属性会给出一个空字符串?

为什么我的密码字段的值总是一个空字符串?

为什么`TRegEx.split` 返回一个空字符串作为第一个元素?

为什么dynamic.ToString()返回字符串之间而不是字符串之间的内容?

什么是toString()?为什么与this.toString()不同?

为什么预期该数组为1的阵列回报大小时,一个空字符串传递?

为什么当我输入一个空字符串('nothing here')时它会忽略我的while条件?

如果仅编辑一个输入字段,为什么可编辑输入字段会提交空字符串?

为什么我无法使用golang解码此JSON?它总是打印一个空字符串

为什么将Mono <Void>映射到Mono <String>时会收到一个空字符串?