Java 这些int-to-String方法之间有什么区别

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作为一个字符串时,我一直在写:

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
    对象

你为什么不亲自检查这些方法中的代码?@ScaryWombat Great point,你会推荐什么资源?要么在IDE中包含jdk代码,要么使用grepcode,为什么不自己检查这些方法中的代码?@ScaryWombat Great point,您可以推荐任何资源吗?在IDE中包含jdk代码或使用grepcode这是一种反模式,应该避免,因为它会创建不必要的
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
在追加空字符串时仍然会创建。