Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,以下字符串中创建了多少个对象_Java_String_Object - Fatal编程技术网

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

在Java中,以下字符串中创建了多少个对象,java,string,object,Java,String,Object,可能重复: 我对以下几点感到非常困惑 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 = "Jav

可能重复:

我对以下几点感到非常困惑

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";
这里创建了多少个对象

String s1 = new String("Java");
String s2 = new String("Ruby");
String s1 = new String("Java");
String s2 = "Java";
String s1 = "Java";
String s2 = "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";
这里创建了多少个对象?

您的第一部分代码:

String s1 = new String("Java");
String s2 = new String("Ruby");
String s1 = new String("Java");
String s2 = "Java";
String s1 = "Java";
String s2 = "Java";
创建了两个对象。 若字符串池中不存在Java,则会创建一个字符串并将其添加到其中

代码的第二部分:

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

代码的第三部分:

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

代码的第四部分:

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

String s1 = new String("Java");
String s2 = new String("Java");
它将在堆中创建2个对象

String s1 = new String("Java");
String s2 = new String("Ruby");
String s1 = new String("Java");
String s2 = "Java";
这将在堆中创建2个对象

String s1 = new String("Java");
String s2 = new String("Ruby");
String s1 = new String("Java");
String s2 = "Java";
这将在堆中为第一行创建一个对象。 对于第二行,它将检查字符串池中是否存在Java。如果存在,它将不会创建新字符串。它将返回对池中已存在字符串的引用

String s1 = "Java";
String s2 = "Java";
第一行将检查字符串池中是否存在Java。如果存在,它将不会创建新字符串。它将返回对池中已存在字符串的引用。
第二行将获得对已创建字符串的引用。因此,如果Java存在,则没有新对象,或者最多有一个对象

我不确定,但我认为它是:3,4,2,1@Augusto你觉得第一个怎么样?编码器:你的问题让我用谷歌搜索了一下,你可以找到一个很好的解释。如果您编写一些代码,使用==运算符检查字符串是否相同,您就可以轻松地对此进行测试。@Augusto谢谢您。看到人们给出的不同答案,我真的很困惑。你能不能把答案贴在这里,这样对其他人会有帮助:你的答案是错的,试着运行一些代码来证明你的价值观,你会发现它是不正确的。答案中出了什么问题?我不计算添加到字符串池的字符串,只计算堆上的对象。@Azodious池中的字符串可能也在堆上,它们在热点1.7+上。@assylias:noted。在这种情况下,这个问题就没有一个明确的答案了。将取决于StringPool状态。i、 e.只有当您将字符串创建为文字时,才会执行特定字符串存在或notString池检查。如果您使用new运算符创建字符串,则即使池中有相同内容的字符串可用,也会创建新的字符串对象。阅读更多:最后一段中提到的第一行不检查任何内容。文本位于字符串池中,由编译器和类加载器放在那里。