首先,我的问题是如何将原始类型int
转换为String
而不是对象,因此没有toString()
方法来获取String
1}}值。
我很清楚你是如何看待'转换' Java中基本类型int
到String
的变量。我使用的最简单的方法是:
int x = 5;
String y = "" + x;
这很有效,但我的问题如下:
由于原始类型int
不是对象,因此没有任何方法,例如我需要的toString()
方法,以获得变量的String
值。 ..如果没有这种基本方法,变量的值如何被识别?
答案 0 :(得分:11)
这称为字符串转换。 JLS, Section 5.1.11,声明:
任何类型都可以通过字符串转换转换为
String
类型。基本类型T的值x首先转换为引用值,就好像将它作为参数提供给适当的类实例创建表达式(第15.9节):
(其他类型)
- 如果T为
byte
,short
或int
,则使用new Integer(x)
。
然后通过字符串转换将此引用值转换为String类型。
现在只需要考虑参考值:
如果引用为
null
,则会将其转换为字符串"null"
(四个ASCII字符n
,u
,l
,{ {1}})。否则,转换的执行就好像通过调用引用对象的
l
方法而没有参数一样;但如果调用toString
方法的结果为toString
,则会改为使用字符串null
。
因此,"null"
转换为int
,而不是通过装箱转换,而是Integer
,然后调用new Integer(x)
。
技术上不是拳击转换;自Java开始以来,字符串转换一直使用该语言,其中装箱转换是在Java 1.5中添加的。
答案 1 :(得分:4)
通常,通过调用以下两种方法之一将int
值转换为String
:
对于其他原始值,使用这些方法中的任何一个的相应重载。
<强> StringBuilder.append()强>
表达式"" + x
由编译器实现为:
new StringBuilder().append("").append(x).toString()
将x
声明为int
,这意味着将调用带有append()
参数的int
重载。
append(int)
的来源(Java 1.8.0_65)是:
@Override
public StringBuilder append(int i) {
super.append(i);
return this;
}
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);
}
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()强>
正如您所看到的,两者都通过实际调用package-private方法Integer.getChars(int i, int index, char[] buf)
来实现。
它们都没有实际创建Integer
的实例,即使JLS暗示它会。{/ p>
答案 2 :(得分:1)
您可以将 static String 的valueOf方法用于基本类型,例如int,double,float。一些代码:
int intValue = 25;
String s = String.valueOf(intValue);