繁体   English   中英

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

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

这在JLS-15.18.1中得到了很好的解释 字符串连接运算符+

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

您应该注意以下事项:

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

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

3 fiddlers

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

fiddlers 12

当Java编译器看到operator +应用于String和非字符串时,它会起到一点作用:它将null检查对象,对其调用toString() ,然后执行字符串连接。

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

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

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

但是,如果你这样做

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

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

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

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

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

此外,当您直接打印任何数字时,它实际上调用其Wrapper类的toString()方法,并打印字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM