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()
方法,并打印了字符串。
参见下面的代码片段:
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()
方法,并打印了字符串。