Java 字符串串联-值是否为
所以我只是仔细阅读了一会儿,这里所有关于Java 字符串串联-值是否为,java,string,Java,String,所以我只是仔细阅读了一会儿,这里所有关于.valueOf字符串的不同问题,但它们似乎都是关于转换的。将.valueOf与+“进行比较 我想知道它是否值得,或者如果它是一个串联,是否有必要使用.valueOf 示例: LOGGER.info("Final Score: " + String.valueOf(Math.round(finalScore * 100)) + "%"); VS LOGGER.info("Final Score: " + Math.round(finalScore * 1
.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
可能会更好。您是正确的。组合字符串和其他数据类型时,不需要valueOf。对于一个int,我认为工作的价值,但有趣的是,第二个例子更常见
@Test
public void testStringValueOF(){
int num = 123;
// this works...
String test = String.valueOf(num);
// but this is more common
String test2 = "" + num;
}
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
之间似乎没有任何区别。当我们串接字符串时,编译器实际上会将其转换为
和的底层实现最终都会调用,除了在String.valueOf()
的情况下,首先调用Integer.toString(int)
总之,对于给定的场景,直接连接将是一种可行的方法。但是,如果您想了解内存,那么请先使用字符串生成器连接值,然后记录它。我想知道在上下文中,在实际字符串上添加另一种值类型,而不仅仅是用于转换的空字符串。因此,如果您已经输出了文本,valueOf将只是行中的更多代码,但是没有做任何不同的事情,因为它已经在幕后使用了toString。使它有点冗余?我同意,是的。因此,即使您使用这两种方法中的一种而不是直接连接,StringBuffer.append实际上会更好,因为它只需要一个步骤?是的,因为在这种情况下,您将帮助编译器不必再这样做。