所以我只是暂时阅读了一段时间,关于.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
可能会更好。
答案 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();
}
因此valueOf
和toString
之间的唯一区别是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)
@Test
public void testStringValueOF(){
int num = 123;
// this works...
String test = String.valueOf(num);
// but this is more common
String test2 = "" + num;
}