String.valueOf(int i)与仅打印i之间的区别

时间:2016-04-11 12:53:32

标签: java string casting value-of

请参阅以下代码段:

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才能获得相同的结果。

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

2 个答案:

答案 0 :(得分:6)

JLS - 15.18.1. String Concatenation Operator +

对此进行了详细解释
  

如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换(§5.1.11)以在运行时生成字符串

您应该注意以下事项:

  

+运算符在语法上是 left-associative ,无论是否   由类型分析确定以表示字符串连接或   数字加法。在某些情况下,需要注意才能获得所需   结果

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

3 fiddlers

然而,写"fiddlers " + 1 + 2会产生:

fiddlers 12

答案 1 :(得分:1)

Java编译器在看到运算符+应用于String和非字符串时发挥了一点小技巧:它null - 检查对象,调用toString() on它,然后执行字符串连接。

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

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

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

但是,如果你这样做

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

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

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