原始类型int如何实际转换为String?

时间:2016-02-25 16:05:10

标签: java string int tostring

首先,我的问题是如何将原始类型int转换为String而不是对象,因此没有toString()方法来获取String 1}}值。

我很清楚你是如何看待'转换' Java中基本类型intString的变量。我使用的最简单的方法是:

int x = 5;
String y = "" + x;

这很有效,但我的问题如下:

由于原始类型int不是对象,因此没有任何方法,例如我需要的toString()方法,以获得变量的String值。 ..如果没有这种基本方法,变量的值如何被识别?

3 个答案:

答案 0 :(得分:11)

这称为字符串转换JLS, Section 5.1.11,声明:

  

任何类型都可以通过字符串转换转换为String类型。

     

基本类型T的值x首先转换为引用值,就好像将它作为参数提供给适当的类实例创建表达式(第15.9节):

(其他类型)

  
      
  • 如果T为byteshortint,则使用new Integer(x)
  •   

然后通过字符串转换将此引用值转换为String类型。

现在只需要考虑参考值:

  
      
  • 如果引用为null,则会将其转换为字符串"null"(四个ASCII字符nul,{ {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);