Java 这些int-to-String方法之间有什么区别
一段时间以来,每当我需要一个int作为一个字符串时,我一直在写:Java 这些int-to-String方法之间有什么区别,java,Java,一段时间以来,每当我需要一个int作为一个字符串时,我一直在写: int a = 22; String b = a + ""; 我想知道我在参考中是否应该考虑到任何差异 String b = String.valueOf(a) //or String b = Integer.toString(a) 上述方法在“延迟铸造”上使用有什么好处吗?或者上述所有方法都是相同的吗?来自String.java,String#valueOf调用Integer#toString: /** * Retu
int a = 22;
String b = a + "";
我想知道我在参考中是否应该考虑到任何差异
String b = String.valueOf(a)
//or
String b = Integer.toString(a)
上述方法在“延迟铸造”上使用有什么好处吗?或者上述所有方法都是相同的吗?来自
String.java
,String#valueOf
调用Integer#toString
:
/**
* Returns the string representation of the {@code int} argument.
* <p>
* The representation is exactly the one returned by the
* {@code Integer.toString} method of one argument.
*
* @param i an {@code int}.
* @return a string representation of the {@code int} argument.
* @see java.lang.Integer#toString(int, int)
*/
public static String valueOf(int i) {
return Integer.toString(i);
}
出于这个原因,我会坚持使用Integer#toString
关于字符串b=a+“”:
- 这是一种反模式,应该避免,因为它会创建不必要的
对象String
String.java
中的源代码中,String#valueOf
调用Integer#toString
:
/**
* Returns the string representation of the {@code int} argument.
* <p>
* The representation is exactly the one returned by the
* {@code Integer.toString} method of one argument.
*
* @param i an {@code int}.
* @return a string representation of the {@code int} argument.
* @see java.lang.Integer#toString(int, int)
*/
public static String valueOf(int i) {
return Integer.toString(i);
}
出于这个原因,我会坚持使用Integer#toString
关于字符串b=a+“”:
- 这是一种反模式,应该避免,因为它会创建不必要的
对象String
String
对象。Source?@shmosel OP在这一点上有一半是正确的:创建了不必要的对象,但是StringBuilder/StringBuffer
而不是String
<代码>字符串a=b+c代码>被编译器翻译成String a=new StringBuilder(b).append(c).toString()
,因此创建了不必要的StringBuilder
。@AdrianShum是的,我知道这一点。虽然我想知道编译器是否可以优化空空间追加。@shmosel将来可能会这样,但我刚刚在Java8中测试过,StringBuilder
在追加空字符串时仍然会创建。这是一种反模式,应该避免,因为它会创建不必要的string
对象。Source?@shmosel OP在这一点上有一半是正确的:创建了不必要的对象,但是StringBuilder/StringBuffer
而不是String
<代码>字符串a=b+c代码>被编译器翻译成String a=new StringBuilder(b).append(c).toString()
,因此创建了不必要的StringBuilder
。@AdrianShum是的,我知道这一点。虽然我想知道编译器是否可以优化空空间追加。@shmosel将来可能会这样做,但我刚刚在Java8中进行了测试,StringBuilder
在追加空字符串时仍然会创建。