在下面的代码中创建了多少个String对象?

时间:2015-10-06 14:56:07

标签: java

我试图找到在下面的代码中创建的String对象的数量。 我认为它是4因为String是不可变的,所以prod()方法中的前两行中的每一行都将创建一个对象,第三行将创建2个对象。因此将创建总共4个对象。有人可以澄清一下吗?

public class Solution {

    public void prod() {
        String str="Sku";
        str=str+"001";
        String skuId= str.substring(3,6);
        System.out.println(skuId.toString());
    }
    public static void main(String[] args) {
        new Solution().prod();
    }
}

2 个答案:

答案 0 :(得分:1)

我认为是4.在我的解释之下。

public class Solution {
    public void prod() {
        String str = "Sku"; // first
        str = str + "001"; // second when create "001" and third when concat strings
        String skuId = str.substring(3, 6); //fourth
        System.out.println(skuId.toString()); //method toString don't create new string
    }

    public static void main(String[] args) {
        new Solution().prod();

    }
}
  1. " SKU" //创建新
  2. " 001" //创建新
  3. " Sku001" // str + "001" operations
  4. 的结果
  5. " 001" // str.substring(3, 6)的结果。 Substring方法返回new String()

答案 1 :(得分:0)

在Java 7中,第一次运行代码时,将加载字符串文字,使其成为4,但之后prod()方法只会创建2个String个对象。

在Java 7之前,在加载类时加载了字符串文字,因此该方法只会添加两个字符串。

这当然会在每个String中省略char[],这是另一个对象。

BTW,这个类第一次加载并运行时,JVM实际上创建了许多此处不可见的String对象。

例如,要加载Solution类,它首先使用"Solution"字符串查找类名。