2

请参见下面的代码片段:

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.

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

4

3 回答 3

6

这在JLS - 15.18.1 中有很好的解释。字符串连接运算符 +

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

你应该注意以下几点:

+运算符在语法上是左关联的,无论是通过类型分析确定表示字符串连接还是数字加法。在某些情况下,需要小心才能获得所需的结果。

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

3 fiddlers

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

fiddlers 12
于 2016-04-11T13:00:36.403 回答
1

当 Java 编译器看到运算符+应用于 aString和非字符串时,它会玩一个小技巧:它null检查对象,调用toString()它,然后执行字符串连接。

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

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

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

但是,如果你这样做

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

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

String s = String.valueOf(count); // <<== Compiles fine
于 2016-04-11T13:00:15.403 回答
0

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

因此,它用于优雅int地将 an 转换为 String 。作为,做的是IMNSHO,不太优雅。i+""

而且,当你直接打印任何数字时,它实际上调用了toString()它的 Wrapper 类的方法,并打印了字符串。

于 2016-04-11T13:02:53.470 回答