String.valueOf(int i) 和只打印 i 的区别

Difference between String.valueOf(int i) and printing only i

参见下面的代码片段:

int count = 0;
String query = "getQuery"; 
String query1 = "getQuery";
final String PARAMETER = "param";

query += "&" + PARAMETER  + "=" + String.valueOf(count);
query1 += "&" + PARAMETER  + "=" + count;
System.out.println("Cast to String=>"+query);
System.out.println("Without casting=>"+query1);

两个输出完全一样。 所以我想知道当我们只使用 count.

就可以得到相同的结果时为什么要使用它

我得到了一些link但没有发现完全相同的混淆。

Java 编译器在看到运算符 + 应用于 String 和非字符串时玩了个小把戏:它 null 检查对象,调用toString() 就可以了,然后进行字符串连接。

这就是你写这篇文章时发生的事情:

query1 += "&" + PARAMETER  + "=" + count;
//        ^^^   ^^^^^^^^^    ^^^

当您想要默认转换为 String 时,您当然可以这样做。

但是,如果您这样做

String s = count; // <<== Error

编译器不会编译它,因为没有串联。在这种情况下,您可能希望使用 valueOf:

String s = String.valueOf(count); // <<== Compiles fine

这在JLS - 15.18.1. String Concatenation Operator +中有很好的解释:

If only one operand expression is of type String, then string conversion (§5.1.11) is performed on the other operand to produce a string at run time.

您应该注意以下几点:

The + operator is syntactically left-associative, no matter whether it is determined by type analysis to represent string concatenation or numeric addition. In some cases care is required to get the desired result.

如果你写 1 + 2 + " fiddlers" 结果将是

3 fiddlers

但是,写入 "fiddlers " + 1 + 2 会产生:

fiddlers 12

String.valueOf(int) 实际上调用了 Integer.toString()

因此,它用于将 int 优雅地 转换为字符串 。因为,做 i+"" 是恕我直言,不太优雅。

此外,当你直接打印任何数字时,它实际上调用了它的包装器 class 的 toString() 方法,并打印了字符串。