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

理解在Java中创建字符串文字[重复]

叶淇
2023-03-14

我是堆栈溢出的新手,我发现它非常有用,非常感谢一个伟大的社区。虽然我一直在了解 java 中的字符串,但我只是想知道字符串文字源代码是如何创建的?我理解了java中字符串的大部分概念。这是一种特殊的最终类,我也理解在创建 String 文字时,将在堆上创建一个对象,其引用将在字符串常量池中。通过使用这个。

String name = "Manchester";

我还了解到,当使用 new 运算符创建字符串时,引用将在堆上具有对象,并在字符串常量池中具有引用。通过这种方式。

String name = new String("United");

因为我确实理解了对象是如何使用new运算符在堆上创建的,我不明白的是当我们使用双引号“”时,对象是如何在堆上创建的。这是如何完成的?我也去想了String.class的源代码,但对我没有任何帮助。

任何人都可以让我知道这是如何工作的吗?谢谢。

共有1个答案

戚侯林
2023-03-14
String name = "Manchester";

将在字符串的常量池中(在堆中)搜索相同的值对象,如果找到将使用该对象,如果没有将执行此操作:

String name = new String("Manchester");

请注意,String是不可变的,因此它尝试使用已经存在的对象,而不是创建一个。

您可以通过以下方式检查它:

String x = "a";
String y = "a";

x==y //true

而且

String x = new String("a");
String y = new String("a");

x==y //false
 类似资料:
  • 当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是

  • 如何在swift 4中对字符串进行子串。 我想转换: “你好,世界!” 进入: “你好”

  • 问题内容: 我正在尝试使用Weka的Java API创建新的字符串属性… 通读API javadocs,看来这样做的方法是使用以下构造函数: 但是我对应该传递给attributeValues参数的方式感到困惑… 当我放入null时,Java会 在放入Null时抱怨受保护的对象,当我放入Null时,这是语法错误, 当它 创建一个新对象时,它将变为名义上的属性,而不是字符串属性… 然后将fv传递给参数

  • 问题内容: 有什么方法可以在Java中使用字符串的哈希码,然后重新创建该字符串? 例如这样的事情: 我之所以这样说,是因为我必须将字符串转换为整数值,然后从该整数值重构该字符串。 问题答案: 这是不可能的。String的哈希码是有损的;许多字符串值将导致相同的哈希码。一个整数有32个位,每个位置有两个值。即使是32个字符的字符串(例如,每个字符都有很多可能性)也无法映射为32位而不会发生冲突。他们

  • 如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="