当前位置: 首页 > 知识库问答 >
问题:

在构造函数中传递的字符串文本在哪里,当我们创建一个新的字符串对象时存储在哪里

艾璞瑜
2023-03-14

在Java当我们写作的时候

String S1 = "TestString";
String S2 = "TestString";

然后与if(S1==S2)进行比较,我们得到true作为布尔结果。对相同的解释是字符串常量是在字符串池中创建的,因此这里由S1和s2引用的字符串常量是相同的。还有,如果我们写一些

String S1 = new String("TestString");

String S2 = new String("TestString");

然后与进行比较,如果(s1==s2),我们得到false。原因是S1和S2的引用不同,因为字符串文字是在堆中创建的。

我的问题是,在构造函数中传递的字符串文字“TestString”是在哪里创建的?它与字符串文字/常量相同吗?因此应该在池中创建,就像在情况1中一样?如果是这样的话,当我们在上面两个语句后面写一些东西的时候

String S3 = "TestString";

这不应该创建一个新的字符串文字,比较if(s1==s3)应该给出true,但它给出false。

所以我无法确定在创建的构造函数中传递这个字符串的时间和地点。

如有任何帮助,将不胜感激。谢谢

共有1个答案

翟嘉祥
2023-03-14

我的问题是,在构造函数中传递的字符串文字“TestString”是在哪里创建的?它与字符串文字/常量相同吗?因此应该在池中创建,就像在情况1中一样?

正确,传递给构造函数调用的常量字符串新字符串(“teststring”)存储在字符串池中,就像语句string S1=“teststring”中一样。

String S1 = new String("TestString");

String S2 = new String("TestString");

String S3 = "TestString";

在本例中,s1==s3给出false,因为s3引用了由用于s1的构造函数的参数创建的字符串文字,而s1是一个不同的字符串(因为它是用构造函数创建的)。

 类似资料:
  • 我在做一个作业,我得到了下面这个问题。 使用方法创建的字符串对象存储在内存中的哪里? 在恒定池中 在堆上(新操作员对象的区域)

  • 我知道这可能是非常基本的,也可能是非常直接的,但我无法清楚地理解在这种情况下会发生什么,所以,就这样吧。 在以下代码中: 我知道str1和str2将在字符串常量池中分别创建一个对象“Hello”和“World”。而对于str3,将在字符串常量池外部创建一个新对象,该对象指向在字符串常量池内部创建的“HelloWorld”。 我的问题是,如果我concat 2个或更多字符串(使用“”或concat(

  • 当我们使用 String 文字创建字符串对象时,会调用字符串类的哪个构造函数。 示例: 在这种情况下,string类的哪个构造函数get?

  • 根据Java, 字符串存储在两个地方。字符串字面池和堆内存根据其创建。我需要知道,当字符串赋值到另一个字符串时,新创建的字符串将存储在哪里? 我对堆和字符串池中的字符串类型都进行了赋值操作。我得到了这样的结果。 但是当, 如果我这么做 同样地, 现在 以上是我在IDE上得到的输出。根据该输出,strNew的一个新引用对象在字符串池中创建,strNew的一个新引用对象在堆中创建。对吗?

  • 问题内容: 我知道这可能是很基本的,可能很简单,但是我无法清楚地了解在这种情况下会发生什么,所以就来了。 在下面的代码中: 我知道,str1和str2的将分别创建一个对象的“Hello”和“世界” 里* 的 字符串常量池的 。对于str3,在 字符串常量池 外部 创建一个新对象,该对象指向 在 字符串常量池 内部 创建的“ HelloWorld” 。 __ *__ 我的问题是,如果我concat

  • 可能重复: C数组实例化-堆栈还是堆分配? 动态分配包含char指针的结构时,实际的char指针会发生什么情况?它存放在哪里? 一旦结构被释放,char指针是否与它一起被释放? 例如,考虑以下结构: 然后是为其分配内存的以下代码: 是否在堆栈上分配了s,然后与ptr一起释放?我可以想象它确实是在堆栈上分配的,因为它不是以任何方式动态分配的(除非malloc有一些我不知道的功能)。我想,对于s来说,