Java int to String - Integer.toString(i)vs new Integer(i).toString()

时间:2010-10-14 05:02:45

标签: java string int

有时java会困扰我 我有大量的 int 初始化。

真正的差异是什么?

  1. Integer.toString(i)
  2. new Integer(i).toString()

11 个答案:

答案 0 :(得分:541)

Integer.toString调用类Integer中的静态方法。它不需要Integer的实例。

如果调用new Integer(i),则创建类型为Integer的实例,这是一个封装int值的完整Java对象。然后在其上调用toString方法,要求它返回本身的字符串表示

如果您只想要打印int,那么您将使用第一个,因为它更轻,更快并且不使用额外的内存(除了返回的字符串)。

如果你想要一个表示整数值的对象 - 例如将它放在一个集合中 - 你会使用第二个,因为它为你提供了一个完整的对象来做你不能做的所有事情一个裸int

答案 1 :(得分:95)

new Integer(i).toString()首先在i周围创建一个(冗余的)包装器对象(它本身可能是一个包装器对象Integer)。

Integer.toString(i)是首选,因为它不会创建任何不必要的对象。

答案 2 :(得分:42)

另一种选择是静态String.valueOf方法。

String.valueOf(i)

感觉对我来说比Integer.toString(i)略胜一筹。当i的类型更改时,例如从int更改为double,代码将保持正确。

答案 3 :(得分:14)

  1. new Integer(i).toString();

    此语句创建Integer的对象,然后将其方法toString(i)调用为返回Integer值的字符串表示

  2. Integer.toString(i);

    返回表示特定int(整数)的String对象,但此处toString(int)static方法。

  3. 摘要是在第一种情况下它返回对象字符串表示,其中在第二种情况下它返回整数的字符串表示。

答案 4 :(得分:13)

我强烈建议使用

int integer = 42;
String string = integer + "";

简单有效。

答案 5 :(得分:11)

虽然我喜欢fhucho的推荐

String.valueOf(i)

具有讽刺意味的是,这种方法实际上是在调用

Integer.toString(i)

因此,如果您喜欢它的读取方式并且不需要基数,请使用String.valueOf(i),但也要知道它的效率低于Integer.toString(i)

答案 6 :(得分:4)

就性能测量而言,如果您正在考虑时间性能,那么如果您的呼叫次数少于1亿次,则 Integer.toString(i); 会很昂贵。否则,如果超过1亿次调用​​,则 new Integer(10)。toString()将表现更好。

以下是您可以尝试测量性能的代码,

public static void main(String args[]) {
            int MAX_ITERATION = 10000000;
        long starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s = Integer.toString(10);
        }
        long endtime = System.currentTimeMillis();
        System.out.println("diff1: " + (endtime-starttime));

        starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s1 = new Integer(10).toString();
        }
        endtime = System.currentTimeMillis();
        System.out.println("diff2: " + (endtime-starttime));
    }

就记忆而言,

  

new Integer(i).toString();

会占用更多内存,因为它每次都会创建对象,因此会发生内存碎片。

答案 7 :(得分:2)

更好:

Integer.valueOf(i).toString()

答案 8 :(得分:2)

简单的方法是将""与整数:

连接起来
int i = 100;

String s = "" + i;

现在s100作为字符串值。

答案 9 :(得分:1)

下面 Integer.toString调用Integer类中的静态方法。它不需要对象调用。

如果你调用new Integer(i),首先要创建一个Integer类型的实例,它是一个封装int i值的完整Java对象。然后在其上调用toString方法,要求它返回自身的字符串表示。

答案 10 :(得分:0)

1。Integer.toString(i)

Integer i = new Integer(8);
    // returns a string representation of the specified integer with radix 8
 String retval = i.toString(516, 8);
System.out.println("Value = " + retval);

2。new Integer(i).toString()

 int i = 506;

String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String