2015-10-06 92 views
0

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

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(); 
    } 
} 
+0

@CodeShark我敢肯定是不是两个:)。 –

+0

请编辑你的问题,并解释你为什么认为它是4(一个神奇的数字没有解释),否则这个问题是脱离主题。 –

+0

字符串是不可变的,所以prod()方法中的前两行将创建一个对象,第三行将创建2个对象。所以共有4个对象将被创建。 –

回答

0

在Java 7中,第一时间代码是运行字符串文本将被加载,这使得4,但在此之后的prod()方法只会造成2个String对象。

在Java 7之前,字符串文字在加载类时加载,所以该方法只会添加两个以上的字符串。

这当然在另一个对象的每个字符串中省略char[]

顺便说一句,这是第一次加载和运行这个类,JVM实际上创建了许多在此处不可见的String对象。

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

+0

@downvoter任何原因? –

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"操作
  4. “001” //的str.substring(3, 6)结果的结果。子字符串方法返回新的字符串()
+2

虽然是正确的,但是一个诡计就是'String.concat'在这里并没有被实际使用。 –

+1

另外,'String.toString()'返回'this',所以在这里没有创建String对象。 – Tunaki

+0

@Tunaki和OP没有说明,这使得这篇文章是正确的。 –