一般来说,将
int
值转换为
String
,需要调用以下两种方法之一:
对于其他原始类型的值,使用相应的重载方法。
StringBuilder.append()
编译器将表达式
"" + x
实现为:
new StringBuilder().append("").append(x).toString()
如果x
被声明为int
,那么带有一个int
参数的append()
重载将被调用。
append(int)
的源代码(Java 1.8.0_65)如下:
@Override
public StringBuilder append(int i) {
super.append(i);
return this;
}
< p > < code >super 调用会导致:
public AbstractStringBuilder append(int i) {
if (i == Integer.MIN_VALUE) {
append("-2147483648");
return this;
}
int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1
: Integer.stringSize(i);
int spaceNeeded = count + appendedLength;
ensureCapacityInternal(spaceNeeded);
Integer.getChars(i, spaceNeeded, value);
count = spaceNeeded;
return this;
}
String.valueOf()
当将一个值转换为字符串时,通常会调用String.valueOf()
而不使用字符串连接。对于一个int
值,这意味着调用valueOf(int)
:
public static String valueOf(int i) {
return Integer.toString(i);
}
< p >
Integer.toString()
方法是:
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
Integer.getChars()
正如您所看到的,它们都是通过实际调用包私有方法Integer.getChars(int i, int index, char[] buf)
来完成这个操作的。
尽管JLS暗示会创建Integer
的实例,但它们实际上都没有创建。