String Concatenation - valueOf与否

时间:2017-02-16 19:00:07

标签: java string

所以我只是暂时阅读了一段时间,关于.valueOf字符串的所有不同问题,但它们似乎都是关于转换的。比较.valueOf只是+ ""

我想知道它是否值得,或者如果它是串联的话,使用.valueOf是必要的。

示例:

LOGGER.info("Final Score: " + String.valueOf(Math.round(finalScore * 100)) + "%");

VS

LOGGER.info("Final Score: " + Math.round(finalScore * 100) + "%");

如果您有实际的字符串,那么似乎不需要使用String.valueOf。我理解,如果您只是转换它并打算使用空字符串,那么使用.valueOf可能会更好。

3 个答案:

答案 0 :(得分:3)

当我们连接字符串时,编译器实际上将其转换为StringBuffer.append()

StringBuffer.append(int)String.valueOf(int)的基础实现最终都会调用Integer.getChars(int,int,char[]),但在String.valueOf()的情况下,首先调用Integer.toString(int)

总而言之,对于给定的场景,直接连接将是最佳选择。但是如果你想要了解内存,那么首先使用string-builder来连接值,然后记录它。

答案 1 :(得分:1)

String#valueOf(Object)的源代码如下所示:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

因此valueOftoString之间的唯一区别是valueOf是空的安全。因此,如果我们连接字符串和对象,请查看使用哪一个。

Object foo = null;
System.out.println("foo " + foo); //foo null, no exception thrown
System.out.println("foo " + String.valueOf(foo)); //foo null, no exception thrown

因此,在这种情况下连接和使用valueOf之间没有任何区别。

答案 2 :(得分:0)

你是对的。在组合字符串和其他数据类型时,valueOf不是必需的。对于一个int,我认为valueOf有效,但有趣的是,第二个例子更常见

@Test
public void testStringValueOF(){
    int num = 123;

    // this works...
    String test = String.valueOf(num);

    // but this is more common
    String test2 = "" + num;
}