Java:String a = Integer.toString(1);创造了多少个对象?

时间:2013-04-22 15:39:39

标签: java string

我看过声明:

String a = new String("1");

在堆上创建2个对象,一个由a引用,一个从String文字池中引用

但是,怎么样:

String a = Integer.toString(1);

会创建2个对象还是1个? 我认为它创造了2,我是否正确?

7 个答案:

答案 0 :(得分:4)

检查Integer#toString(int)的来源。它返回一个新的String对象。

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(0, size, buf);
}

答案 1 :(得分:3)

它会创建零对象,因为JVM会优化它; - )

换句话说:我相信这个问题的答案与底层虚拟机有关,而不是与Java有关。

答案 2 :(得分:2)

它会在char[]的实现中创建两个:Integer.toString,然后将String转换为。{/ p>

答案 3 :(得分:1)

方法的内部实现可以创建任意数量的方法,只要它满足方法的公共契约即可。

那说,看看当前的实现,唯一的附加对象(除了返回引用的String)是:

    char[] buf = new char[size];

答案 4 :(得分:1)

In the OpenJdk implementation,创建一个char数组,然后从中创建一个String。

答案 5 :(得分:0)

第一次时间:

String a = new String("1");

执行它将创建至少两个(如果不是更多)对象。显然,它会创建一个String,其中可能包含private char[]intern地图中还会有一个新条目,该条目可能包含多个对象。所以 - 总结 - 至少两个,也许四个甚至更多。

从那时起,它应该只创建一个对象Stringchar[]将从实习地图中共享。

每次执行

String a = Integer.toString(1);

您将创建至少一个对象。显然是String,可能是新的char[],可能也许没有别的。如果它使用上面创建的{1}}版“1”,您甚至可能无法创建char[]

一般来说 - 它取决于JVM。

答案 6 :(得分:0)

案例一创建三个对象(char [],String常量和新String),而不是两个。案例二创建两个对象(char []和新String)。检查了JRE 1.7.0_21源,其他JRE可能会以不同方式实现它。