这两种方法有什么区别呢?
1. Integer.toString(i) 2. new Integer(i).toString()
Integer.toString
调用了 Integer
类中的静态方法,不需要使用 Integer
实例。
如果你调用 new Integer(i)
,则会创建一个 Integer
类型的实例,它是一个完整的 Java 对象,封装了你的 int 值。然后你可以在这个实例上调用 toString
方法,让它返回一个代表自己的字符串表示。
如果你只想打印一个 int
,那么使用第一种方式更轻量、更快,并且不会消耗额外的内存(除了返回的字符串)。
如果你需要一个表示整数值的对象,例如将其放入集合中,那么你应该使用第二种方式,因为它提供了一个完整的对象来执行各种你无法通过裸露的 int
值完成的操作。
new Integer(i).toString()
首先创建一个(冗余的)包装对象,围绕着i(它本身可能是一个包装对象 Integer
)。
Integer.toString(i)
是首选的,因为它不会创建任何不必要的对象。
另一种选择是静态的String.valueOf
方法。
String.valueOf(i)
对我来说,感觉比Integer.toString(i)
更加正确。当i的类型发生变化时,例如从int
到double
,代码将保持正确。
我也强烈推荐使用
int integer = 42;
String string = integer + "";
简单而有效。
Integer.toString()
也许需要输入更多字符,但是更加清晰易懂,这在想要维护代码时至关重要。 - Calvin LitoString()
方法吗? - Ankit Deshpandenew Integer(i).toString();
这个语句创建了一个Integer对象,然后调用它的toString(i)
方法返回Integer值的字符串表示形式。
Integer.toString(i);
这个方法返回表示特定int(整数)的String对象,但是这里的toString(int)
是一个静态
方法。
简而言之,第一种情况返回对象的字符串表示形式,而第二种情况返回整数的字符串表示形式。
虽然我喜欢fhucho的建议
String.valueOf(i)
讽刺的是,这种方法实际上调用了
Integer.toString(i)
因此,如果你喜欢它的读音而且不需要进制,那么使用String.valueOf(i)
,但要知道这比Integer.toString(i)
效率低。
在性能测量方面,如果您考虑时间性能,则 Integer.toString(i); 在调用少于一亿次时是昂贵的。而如果超过一亿次,则 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();
new Integer(10).toString()可以简化为Integer.toString(10)
"。 - oksayt更好的方式:
Integer.valueOf(i).toString()
简单的方法就是将""
与整数连接起来:
int i = 100;
String s = "" + i;
现在,s
将会有一个字符串值为100
。
这里的Integer.toString
调用了Integer类中的静态方法。它不需要对象来调用。
如果你调用new Integer(i)
,首先会创建一个类型为Integer的实例,它是一个完整的Java对象,封装了你的int i的值。然后你调用它的toString
方法来请求它返回自己的字符串表示形式。
"" + 42
,但这只是我的个人偏好。第二种形式将产生一个新的整数对象(对于大多数i的值)作为中间结果。它也需要更多的打字。 - user166390"" + 42
也不会更好,因为它需要一个中间的StringBuilder
,而这比一个Integer
更重。 - Joachim Sauer"" + 42
,因为在将整数字符串连接起来时,你可能会不经意地将它们相加而没有注意到。 - BoltzmannBrain