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

有时候java让我困惑 我有大量的int初始化要做

真正的的区别是什么?

  1. Integer.toString(i)
  2. new Integer(i).toString()
1203299 次浏览

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

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

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

如果你想要一个表示整型值的对象——例如把它放在一个集合中——你可以使用第二个对象,因为它为你提供了一个完整的对象,可以做所有你不能用int来做的事情。

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

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

  1. < p > new Integer(i).toString();

    该语句创建Integer对象,然后调用它的方法toString(i)返回Integer值的String形式

  2. < p > Integer.toString(i);

    返回String对象,表示特定的int(整数),但这里toString(int)是一个static方法。

在第一种情况下,Summary返回对象的字符串表示形式,在第二种情况下,它返回整数的字符串表示形式。

在性能度量方面,如果你考虑的是时间性能,那么如果你调用的次数少于1亿次,Integer.toString(我);是昂贵的。否则,如果调用次数超过1亿次,则新的整数(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));
}

在内存方面,

新的整数(我).toString ();

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

我也强烈推荐使用

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

简单有效。

好:

Integer.valueOf(i).toString()

另一个选项是静态String.valueOf方法。

String.valueOf(i)

对我来说,它感觉Integer.toString(i)稍微正确一些。当i的类型改变时,例如从intdouble,代码将保持正确。

这里的< p > Integer.toString调用Integer类中的静态方法。它不需要对象调用

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

虽然我喜欢fhucho的推荐

String.valueOf(i)

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

Integer.toString(i)

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

简单的方法是将""与integer连接起来:

int i = 100;


String s = "" + i;

现在s将有100作为字符串值。

1. __abc0

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);
< p > 2。<代码>新的整数(i) .toString () < /代码> < / p >
 int i = 506;


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