繁体   English   中英

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

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

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

真正的区别是什么?

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

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

如果调用new Integer(i) ,则创建一个Integer类型的实例,它是一个封装int值的完整Java对象。 然后在其上调用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 + "";

简单有效。

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

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

  2. Integer.toString(i);

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

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

虽然我喜欢fhucho的推荐

String.valueOf(i)

具有讽刺意味的是,这种方法实际上是召唤

Integer.toString(i)

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

在性能测量方面,如果您正在考虑时间性能,那么Integer.toString(i); 如果你打电话的次数少于1亿次,那就太贵了。 否则,如果它超过1亿次调用​​,则新的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();

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

更好:

Integer.valueOf(i).toString()

简单的方法就是用整数连接""

int i = 100;

String s = "" + i;

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM