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

可能重复:
这段代码生成了多少个java对象? 为什么?

下面我很困惑

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个对象。 如果字符串池中不存在“Java”,则会创建一个字符串并在其中添加。

你的第二部分代码:

创建了2个对象,如果字符串池中既不存在“Java”也不存在“Ruby”,则会创建并添加两个字符串。

你的第三部分代码:

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

你的第四部分代码:

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

 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”或最多一个对象,则不会有新对象