Java中的以下字符串中创建了多少个对象

时间:2013-01-24 08:57:27

标签: java string object

  

可能重复:
  How many java objects generated by this code? and why?

我对以下内容非常困惑

String s1 = new String("Java");
String s2 = new String("Java");

这里创建了多少个对象?

String s1 = new String("Java");
String s2 = new String("Ruby");

这里创建了多少个对象?

String s1 = new String("Java");
String s2 = "Java";

这里创建了多少个对象?

String s1 = "Java";
String s2 = "Java";

这里创建了多少个对象?

2 个答案:

答案 0 :(得分:0)

您的第一部分代码:

创建了2个对象。 如果String Pool中不存在“Java”,则会创建一个字符串并将其添加到那里。

您的第二部分代码:

创建了2个对象,如果String Pool中既没有“Java”也没有“Ruby”,则会创建并添加两个字符串。

您的第3部分代码:

创建了一个对象。并执行相同的条件以添加到String Pool。

您的第4部分代码:

如果字符串池中不存在“Java”,则只创建一个对象。否则没有创建新对象。

答案 1 :(得分:-1)

String s1 = new String("Java");
String s2 = new String("Java");

它将在堆中创建2个对象。

String s1 = new String("Java");
String s2 = new String("Ruby");

这将在堆中创建2个对象。

String s1 = new String("Java");
String s2 = "Java";

这将在第一行的堆中创建一个对象。 对于第二行,它将检查字符串池中是否存在“Java”。如果存在,则不会创建新字符串。它将返回对池中已存在字符串的引用

String s1 = "Java";
String s2 = "Java";

第一行将检查字符串池中是否存在“Java”。如果存在,则不会创建新字符串。它将返回对池中已存在字符串的引用。 第二行将获取对已创建的字符串的引用。如果存在“Java”或最多一个对象

,则不会有新对象