1

可能重复:
此代码生成了多少个 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";

这里创建了多少对象?

4

2 回答 2

0

您的第一部分代码:

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

您的第二部分代码:

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

您的代码的第三部分:

创建了一个对象。并执行相同的条件以添加到字符串池。

您的第四部分代码:

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

于 2013-01-24T09:02:29.373 回答
-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”存在或最多一个对象,则没有新对象

于 2013-01-24T09:05:58.533 回答